首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将基类转换为派生类

将基类转换为派生类
EN

Stack Overflow用户
提问于 2012-09-24 21:09:55
回答 4查看 242.2K关注 0票数 142

在C#中可以显式地将基类对象转换为它的派生类吗?现在我想,我必须为我的派生类创建一个构造函数,它接受基类对象作为参数,并复制属性值。我真的不喜欢这个想法,所以如果可能的话,我想避免它。

这似乎不应该工作(对象被实例化为新的基类,因此不应该为派生类的额外成员分配内存),但C#似乎允许我这样做:

代码语言:javascript
复制
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;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-24 21:14:01

不,没有像你说的那样转换类的内置方法。要做到这一点,最简单的方法是按照您的建议执行:创建一个DerivedClass(BaseClass)构造函数。其他选项基本上会自动将属性从基础实例复制到派生实例,例如使用反射。

我相信您已经看到,您使用as发布的代码可以编译,但在运行它时会抛出空引用异常,因为myBaseObject as DerivedClass的计算结果为null,因为它不是DerivedClass的实例。

票数 121
EN

Stack Overflow用户

发布于 2012-09-24 21:16:35

您可以自己实现转换,但我不建议这样做。如果您想要这样做以便扩展现有对象的功能,请查看Decorator Pattern

票数 8
EN

Stack Overflow用户

发布于 2012-09-24 21:14:38

不,这没有内置的转换。你需要创建一个构造器,就像你提到的,或者其他一些转换方法。

此外,由于BaseClass不是DerivedClass,因此myDerivedObject将为null,并且上面的最后一行将抛出null引用异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12565736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档