我正在尝试使用反射调用或创建抽象类的实例。这可能吗。这是我尝试过的,但是我收到一条错误消息,提示“无法创建抽象类的实例”。

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/

10-13 04:35