Object#CreateInstance 在 .NET 中的误解
本文关键字:误解 NET Object#CreateInstance | 更新日期: 2023-09-27 18:36:00
我知道你不能实例化抽象类,但C#看起来它正在这样做。我想我只是在语法上遇到了一些问题。下面是示例:
public abstract class AClass {
...
}
public class SomeClass:AClass{
...
}
public class SomeOtherClass{
public static AClass createInstance(string key){
AClass instance = Object.CreateInstance<SomeClass>();
return instance;
}
}
当我打电话给SomeOtherClass.createInstance("key")
时,一切正常。但是,如果您仔细观察,它看起来像AClass
被实例化。有人可以解释一下这里发生了什么吗?
此代码不是实例化抽象类 - 它是实例化扩展抽象类的类。
它相当于
AClass instance = new SomeClass();
赋值有效,因为SomeClass
是 AClass
的子类。由于继承对"is-a"关系进行建模,因此始终允许将子类的实例分配给类型为超类或接口的变量。
有一个
类型为"引用AClass
"的变量,它指的是类型为 SomeClass
的完整对象中的AClass
子对象。
抽象类实例只能作为基子对象存在。 此代码不会违反该规则。