【发布时间】:2011-05-27 19:15:37
【问题描述】:
使用反射,是否可以使用抽象基类的构造函数创建从抽象基类继承的类型的实例?也就是说,如果继承类没有自己的构造函数?有点像下面,但它会抛出一个错误,因为你当然不能创建抽象类的实例:
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) } 来完成这项工作,但当然那不是构造函数,属性必须是公共的,等等。
【问题讨论】:
-
通常这被视为Factory method 的主要情况。
标签: c# reflection constructor abstract-class