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

时间:2011-05-27 19:15:37

标签: c# reflection constructor abstract-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;    
}

您可以通过执行新的T {(在此处指定属性)}来完成此工作,但当然这不是构造函数,并且属性必须是公共的等等。

1 个答案:

答案 0 :(得分:4)

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

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

(您当前的示例甚至不会编译,因为默认的Person构造函数没有要调用的无参数基类构造函数。)