如果我有父类:
public class ParentClass
{
public string ParentStr = string.empty;
}
和一个儿童班:
public class ChildClass : ParentClass
{
public string ChildStr = string.empty;
}
稍后在我的代码中说我有一个ParentClass的实例
ParentClass parentClass = New ParentClass() { ParentStr = "something" }
是否可以从ParentClass创建ChildClass的实例?有什么影响:
ChildClass childClass = (ChildClass)parentClass
答案 0 :(得分:3)
用英语术语来思考:如果你的父类是Animal
且子类是Dog
,你可以毫无疑问地说Animal
是一个Dog
?
用另一个问题回答问题并不是很好,所以真正的答案是:不,你不能将基类的实例强制转换为子类。
但是,如果将子类的实例存储在基类类型的变量中,则允许将其强制转换回子类。以下是有效的:
ParentClass p = new ChildClass();
ChildClass c = (ChildClass)p;
答案 1 :(得分:2)
我想你可以提供implicit或explicit运营商来做这件事,虽然看起来很奇怪。
子类定义了一个is-a关系,但是子类是一个超类,而不是相反。在不知道你的课程是什么的情况下,我认为除此之外你还有设计问题。
答案 2 :(得分:0)
没有。 ChildClass是一个不同的类型,您不能将ParentClass的实际运行时实例强制转换为ChildClass。
答案 3 :(得分:0)
目的是什么?如果存在这样的构造,那么新的ChildClass
,我想,只有扩展ParentClass
的任何属性的默认值。只需创建一个ChildClass
对象即可。
对于继承的类,您始终可以使用基类类型容器。您不应该尝试将对象的实例重新创建为派生类型,而应该创建派生类型的实例,并且如果您希望能够交换对象,则使用基类型容器:
ParentClass parentClass = new *ChildClass*() { ParentStr = "something" }
ChildClass childClass = (ChildClass)parentClass
我不推荐这些命名约定:)