在抽象类中的方法创建其派生类的实例后,会发生什么?

时间:2018-03-22 10:44:31

标签: c# inheritance

最近在一次采访中,我被问到这个问题:我有一个抽象类A,B类派生A.抽象类有一个创建类B(派生)实例的方法。我知道我们可以做到这一点。我认为这是一个糟糕的设计。但是我无法理解基类如何知道它的派生类来创建派生类的实例。

1 个答案:

答案 0 :(得分:5)

假设你的意思是:

abstract class A
{
    void Foo() { var b = new B(); /* now do something with b */ }
}
class B : A { }

任何代码都可以引用任何成功解析的类型;如果A可以看到B,那么当然A可以创建B,就像任何其他代码可以创建B一样}。

不是做的是说“创建我的具体类型的实例” - 这里的B只是静态地知道。 “创建我的具体类型的实例”必须通过反思来完成:

var a = (A)Activator.CreateInstance(GetType());

(这将是脆弱的,因为我们不知道实际类型需要有意义地构建)