如何使用反射来获取默认构造函数?

发布于 2024-09-05 06:12:52 字数 566 浏览 5 评论 0原文

我正在编写一个在运行时动态生成抽象类的派生类的库。派生类的构造函数需要基类构造函数的 MethodInfo 才能调用它。但是,由于某种原因,Type.GetConstructor() 返回 null。例如:

abstract class Test
{
    public abstract void F();
}

public static void Main(string[] args)
{
    ConstructorInfo constructor = typeof(Test).GetConstructor(
        BindingFlags.NonPublic | BindingFlags.Public, 
        null, System.Type.EmptyTypes, null); // returns null!
}

请注意,即使我在 Test 中显式声明构造函数,并且即使 Test 不是抽象的,GetConstructor 也会返回 null

I am writing a library that generates derived classes of abstract classes dynamically at runtime. The constructor of the derived class needs a MethodInfo of the base class constructor so that it can invoke it. However, for some reason Type.GetConstructor() returns null. For example:

abstract class Test
{
    public abstract void F();
}

public static void Main(string[] args)
{
    ConstructorInfo constructor = typeof(Test).GetConstructor(
        BindingFlags.NonPublic | BindingFlags.Public, 
        null, System.Type.EmptyTypes, null); // returns null!
}

Note that GetConstructor returns null even if I explicitly declare a constructor in Test, and even if Test is not abstract.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦萦几度 2024-09-12 06:12:52

想通了。我忘记了 BindingFlags.Instance 标志。

奇怪的是

ConstructorInfo constructor = typeof(Test).GetConstructor(System.Type.EmptyTypes);

返回null。是否有缺陷?

Figured it out. I forgot the BindingFlags.Instance flag.

The strange thing is that

ConstructorInfo constructor = typeof(Test).GetConstructor(System.Type.EmptyTypes);

returns null. Is it defective?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文