我正在尝试使用反射调用或创建抽象类的实例。这可能吗。这是我尝试过的,但是我收到一条错误消息,提示“无法创建抽象类的实例”。
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
关于c# - 如何使用反射创建或调用抽象类的 protected 构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16055147/