繁体   English   中英

为什么我们不能使用GetConstructor找到Int32的默认构造函数?

[英]Why can't we find Int32's Default Constructor using GetConstructor?

在C#中我们可以这样做:

Int32 i = new Int32();

但是以下内容将返回null

typeof(Int32).GetConstructor(new Type[0])

为什么是这样?

我检查了文档 ,没有找到解决这个问题的原因。

我的结果可以在下面的代码中说明:

using System;

public class Program
{
    public static void Main()
    {
        Int32 i = new Int32();
        Console.WriteLine(i);
        Console.WriteLine(typeof(Int32).GetConstructor(new Type[0]) == null);
    }
}

输出是:

0

真正

阿列克谢莱文科夫在评论中发表了一个非常好的答案,所以我决定采取内容并解释他们回答我的问题。 参考原始问答

它有点厚,但这里是答案:

结构不一定具有无参数构造函数。 它们可以有一个,但C#不发出一个,编译器不需要一个。 C#标准讨论了所有具有“隐式公共参数构造函数,称为默认构造函数”的值类型,但它随后指出生成构造函数调用不需要实现,并且调用就像它们是构造函数一样,尽管它们不是必然是建设者。

反射可能找不到构造函数方法的原因是因为它实际上不存在。 CLR将允许您在没有构造函数的情况下实例化,并填充对象包含的内存位置。

更新:我想注意Jon Skeet 在这里也回答了与此相关的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM