【发布时间】:2013-09-18 13:10:40
【问题描述】:
我有这种情况
public class Base
{
public Basedef def;
}
public class A : Base
{
}
public class B : A
{
public int GetBar()
{
return def.bar;
}
}
public class BaseDef
{
}
public class ADef : BaseDef
{
public int foo;
}
public class BDef : ADef
{
public int bar;
}
如您所见,方法 B:GetBar() 中存在错误,因为 def 无法访问 bar,但如果您使...
public int GetBar()
{
return (def as BDef).bar;
}
应该可以,但我想避免强制转换,如何使用基类中创建的引用从定义中获取属性而不使用强制转换?
为什么要避免强制转换?,因为容易出现运行时错误并且更容易引入错误,我想要类型安全的编码。
我想做什么
public class Factory
{
public static Base<BaseDef> Create(BaseDef d)
{
if(d is BDef)
return new B(); //Error, can not convert B to Base<BaseDef>
}
}
public class Program
{
B instance = Factory.Create(new BDef()); //Error, can not convert to Base<BaseDef> to B
}
我正在寻找一个优雅的解决方案
再见!
【问题讨论】:
-
我假设您希望 ADef 从 BaseDef 继承,但您没有编写它,因此将 BaseDef 转换为 BDef 毫无意义...
-
为什么要避免演员表?如果没有虚拟方法或属性/反射,您想要实现的目标是不可能的
-
假设您的意思是
ADef : BaseDef,我已经编辑了您的问题。如果不编辑您的问题 -
Sriram,是的,我的意思是,感谢您指出这一点
-
Sriram,更新的问题,添加了为什么我想避免投射