C# NET中的对象#CreateInstance
我知道你不能实例化一个抽象类,但C#看起来就是这么做的。我想我只是在语法上有点问题。下面是一个例子: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
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 toAClass
”的变量它引用类型为SomeClass
的完整对象中的AClass
子对象
抽象类实例只能作为基子对象存在。此代码没有违反该规则。他正在创建
SomeClass
的实例,并将其强制转换为AClass
,这是否清楚<代码>AClass实例=新建SomeClass()代码>我想我在理解什么是AClass instance=Object.CreateInstance()时遇到了最大的困难
正在执行。如果没有看到CreateInstance方法的定义,我们只能猜测它与这里的任何其他问题一样,但不是使用new SomeClass()
而是将其包装为Object.CreateInstance()
。如果你知道基本C#,那么你就知道它的作用。