在C#中可以显式地将基类对象转换为它的派生类吗?现在我想,我必须为我的派生类创建一个构造函数,它接受基类对象作为参数,并复制属性值。我真的不喜欢这个想法,所以如果可能的话,我想避免它。
这似乎不应该工作(对象被实例化为新的基类,因此不应该为派生类的额外成员分配内存),但C#似乎允许我这样做:
class BaseClass
{
... some stuff ...
}
class DerivedClass : BaseClass
{
public bool MyDerivedProperty{ get; set; }
}
static void Main(string[] args)
{
BaseClass myBaseObject = new BaseClass();
DerivedClass myDerivedObject = myBaseObject as DerivedClass;
myDerivedObject.MyDerivedProperty = true;
}
发布于 2012-09-24 21:14:01
不,没有像你说的那样转换类的内置方法。要做到这一点,最简单的方法是按照您的建议执行:创建一个DerivedClass(BaseClass)
构造函数。其他选项基本上会自动将属性从基础实例复制到派生实例,例如使用反射。
我相信您已经看到,您使用as
发布的代码可以编译,但在运行它时会抛出空引用异常,因为myBaseObject as DerivedClass
的计算结果为null
,因为它不是DerivedClass
的实例。
发布于 2012-09-24 21:16:35
您可以自己实现转换,但我不建议这样做。如果您想要这样做以便扩展现有对象的功能,请查看Decorator Pattern。
发布于 2012-09-24 21:14:38
不,这没有内置的转换。你需要创建一个构造器,就像你提到的,或者其他一些转换方法。
此外,由于BaseClass不是DerivedClass,因此myDerivedObject将为null,并且上面的最后一行将抛出null引用异常。
https://stackoverflow.com/questions/12565736
复制相似问题