C# NET中的对象#CreateInstance

C# NET中的对象#CreateInstance,c#,C#,我知道你不能实例化一个抽象类,但C#看起来就是这么做的。我想我只是在语法上有点问题。下面是一个例子: public abstract class AClass { ... } public class SomeClass:AClass{ ... } public class SomeOtherClass{ public static AClass createInstance(string key){ AClass instance = Object.CreateInstance

我知道你不能实例化一个抽象类,但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;
  }
}
公共抽象类AClass{
...
}
公共类SomeClass:AClass{
...
}
公共类其他类{
公共静态AClass createInstance(字符串键){
AClass instance=Object.CreateInstance();
返回实例;
}
}

当我调用
SomeOtherClass.createInstance(“key”)
时,一切正常。但是,如果仔细观察,就会发现
AClass
已实例化。有人能解释一下这里发生了什么吗?

这段代码不是实例化一个抽象类,而是实例化一个扩展抽象类的类

相当于

AClass instance = new SomeClass();

赋值是有效的,因为
SomeClass
AClass
的子类。由于继承为“is-a”关系建模,因此始终允许将子类的实例赋值给类型为超类或接口的变量。

有一个类型为“reference to
AClass
”的变量它引用类型为
SomeClass
的完整对象中的
AClass
子对象


抽象类实例只能作为基子对象存在。此代码没有违反该规则。

他正在创建
SomeClass
的实例,并将其强制转换为
AClass
,这是否清楚<代码>AClass实例=新建SomeClass()我想我在理解什么是
AClass instance=Object.CreateInstance()时遇到了最大的困难
正在执行。如果没有看到CreateInstance方法的定义,我们只能猜测它与这里的任何其他问题一样,但不是使用
new SomeClass()
而是将其包装为
Object.CreateInstance()
。如果你知道基本C#,那么你就知道它的作用。