c# – 如何使用反射创建或调用抽象类的受保护构造函数?

我试图使用反射调用或创建抽象类的实例.这可能吗.这是我尝试过的,但是我收到一条错误,上面写着“无法创建抽象类的实例”.

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
点赞