在C#中,我们可以这样做:
Int32 i = new Int32();
但是以下内容将返回null
:
typeof(Int32).GetConstructor(new Type[0])
为什么会这样?
我检查了documentation并没有找到解决这个问题的原因。
我的结果可以在以下代码中说明:
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
真
答案 0 :(得分:5)
Alexei Levenkov在评论中发表了一个非常好的答案,所以我决定采取内容并解释他们回答我的问题。 Reference to original Q & A
它有点厚,但这是答案:
结构不一定具有无参数构造函数。它们可以有一个,但C#不发出一个,编译器不需要一个。 C#标准讨论了所有具有"隐式公共参数构造函数的值类型,称为默认构造函数"但它随后指出,生成构造函数调用不需要实现,并且调用就像它们是构造函数一样,尽管它们不一定是构造函数。
反射可能找不到构造函数方法的原因是因为它实际上不存在。 CLR将允许您在没有构造函数的情况下实例化,并填充对象包含的内存位置。
更新:我想注意Jon Skeet也回答了与此相关的问题here