繁体   English   中英

从抽象基 class 构造函数创建继承的 class 的实例

[英]Create an instance of an inherited class from abstract base class constructor

使用反射,是否可以使用抽象基类的构造函数创建从抽象基 class 继承的类型的实例? 也就是说,没有继承的 class 有自己的构造函数? 有点像下面,但它会引发错误,因为您当然不能创建抽象 class 的实例:

abstract class PersonBase
{
     string Name;

     public PersonBase(string _name) { Name = _name; }
}

class Person : PersonBase
{

}

public static T GetPerson<T>(string name) where T : PersonBase, new()
{
   ConstructorInfo info = typeof(T).BaseType.GetConstructor(new Type[] 
                                                              { typeof(string) });

   object result = info.Invoke(new object[] { name }); 

   return (T)result;    
}

您可以通过执行 new T { (assign properties here) } 来完成这项工作,但当然那不是构造函数,并且属性必须是公共的,等等。

调用抽象 class 构造函数(无论是否通过反射)合法的唯一地方是派生 class 的构造函数中。 所以不 - 正如您所说,您将创建抽象类型的实例,而不是具体类型。 想象一下,如果抽象 class 有一个抽象方法,并且您在构造函数返回的任何内容上调用它 - 那会做什么?

如果您可以向我们提供有关您想要实现的目标的更多信息,我们可能会为您提供更多帮助。

(您当前的示例甚至无法编译,因为默认的Person构造函数没有可调用的无参数基础 class 构造函数。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM