![](/img/trans.png)
[英]System.Reflection.MethodInfo class is abstract then why it has a protected constructor?
[英]How to create or invoke protected constructor of abstract class using reflection?
我试图使用反射调用或创建抽象类的实例。 这可能吗。 这是我尝试的方法,但是出现错误消息“无法创建抽象类的实例”。
Type dynType = myTypes.FirstOrDefault(a => a.Name == "MyAbstractClass");
ConstructorInfo getCons =
dynType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[0], null);
object dynamicInstance = getCons.Invoke(null);
编辑:我可以使用反射访问此抽象类的属性吗?
在抽象类上调用构造函数等效于尝试实例化一个抽象类,这是不可能的(您无法创建抽象类的实例)。
您需要做的是创建一个派生类的实例,并声明其构造函数,以便它按如下方式调用基本构造函数:
public class DerivedClass : AbstractClass
{
public DerivedClass() : base()
{
....
}
}
完整的例子:
public abstract class Abstract
{
public Abstract()
{
Console.WriteLine("Abstract");
}
}
public class Derived : Abstract
{
public Derived() : base()
{
Console.WriteLine("Derived");
}
}
public class Class1
{
public static void Main(string[] args)
{
Derived d = new Derived();
}
}
这个的输出是
Abstract
Derived
您不能实例化一个抽象类,甚至不能使用反射。
如果需要实例,请执行以下任一操作:
abstract
修饰符。 您不能创建abstract
类的实例。 但是,您可以使用继承和隐式转换
Derived derived = new Derived();
Abstract abstract = derived;
通过隐式强制转换,您可以将派生实例视为基类实例。
从MSDN
The abstract modifier indicates that the thing being modified
has a missing or incomplete implementation.
请参阅MSDN以获取参考。
正如前面所有答案中已经提到的那样:无法实例化抽象类。
另一个重要说明:通过反射实例化实例,您应该使用Activator.CreateInstance,而不要使用构造函数调用。
object dynamicInstance = Activator.CreateInstance(yourType, yourArguments);
与简单地调用构造函数相比,对象创建过程稍微复杂一些。 它需要分配必要的内存量,然后才通过调用构造函数来设置对象本身。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.