C#set继承类等于基类

时间:2011-03-08 23:01:01

标签: c#

如果我有父类:

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

4 个答案:

答案 0 :(得分:3)

用英语术语来思考:如果你的父类是Animal且子类是Dog,你可以毫无疑问地说Animal是一个Dog

用另一个问题回答问题并不是很好,所以真正的答案是:不,你不能将基类的实例强制转换为子类。

但是,如果将子类的实例存储在基类类型的变量中,则允许将其强制转换回子类。以下是有效的:

ParentClass p = new ChildClass();
ChildClass  c = (ChildClass)p;

答案 1 :(得分:2)

我想你可以提供implicitexplicit运营商来做这件事,虽然看起来很奇怪。

子类定义了一个is-a关系,但是子类是一个超类,而不是相反。在不知道你的课程是什么的情况下,我认为除此之外你还有设计问题。

答案 2 :(得分:0)

没有。 ChildClass是一个不同的类型,您不能将ParentClass的实际运行时实例强制转换为ChildClass。

答案 3 :(得分:0)

目的是什么?如果存在这样的构造,那么新的ChildClass,我想,只有扩展ParentClass的任何属性的默认值。只需创建一个ChildClass对象即可。

对于继承的类,您始终可以使用基类类型容器。您不应该尝试将对象的实例重新创建为派生类型,而应该创建派生类型的实例,并且如果您希望能够交换对象,则使用基类型容器:

ParentClass parentClass = new *ChildClass*() { ParentStr = "something" } 
ChildClass childClass = (ChildClass)parentClass

我不推荐这些命名约定:)