[英]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.