我在哪里找到.net源代码中的ValueType构造函数?

时间:2014-10-11 11:49:15

标签: c# .net

似乎无趣,但我正在学习C#并且正在查看ValueType类。它在这里说http://msdn.microsoft.com/en-us/library/system.valuetype.valuetype(v=vs.110).aspx,构造函数的语法是受保护的ValueType()'。

我的问题是我在哪里可以在源代码中看到这个构造函数?我环顾四周,无法找到它。我找到的最近的东西是' Type Class',但是我无法识别类ValueType和类Type之间的连接...

4 个答案:

答案 0 :(得分:2)

你不会在任何地方找到它。您可能找到它的唯一位置是ValueType class的.NET Framework参考源,但它不包含任何构造函数,它只是将ValueType定义为{ {1}},使用隐式编译器生成的构造函数。因为类是abstract class,所以隐式构造函数是abstract

您也可以使用自己的类型看到这一点:

protected

答案 1 :(得分:2)

你在source code中找不到它。这是正常的,类不必显式声明构造函数。如果没有提供,C#编译器会自动生成一个。在这种情况下,需要调用基础构造函数System.Object。

受保护因为ValueType类是抽象的。

答案 2 :(得分:1)

source code of that type中没有定义构造函数。

MSDN说构造函数是protected,但这是类abstract的结果。这是隐含的。

ValueType是一个仅用于拳击目的的类(就像Enum用于枚举)。它为EqualsGetHashCode提供了不同的默认实现,就此而言。这些方法是虚拟的,并且在类层次结构中为盒装值类型插入ValueType将使CLR将这些方法的调用解析为更合适的实现,因为两个相同的盒装值应该被视为相等,与两个相同的类实例不同,默认情况下它们将使用引用相等。

我认为你不应该担心它,因为它更像是一个实现细节而不是其他任何东西。

另一方面,Type类用于反射目的。它表示类型系统中的类型(如类/结构/接口)。 typeof(SomeType)将返回Type个实例,someInstance.GetType()也会返回。

一些测试用例:

object boxed = 42;
Console.WriteLine(boxed.GetType().FullName);                            // System.Int32
Console.WriteLine(typeof(ValueType).IsAssignableFrom(boxed.GetType())); // True

答案 3 :(得分:1)

除了作为使.NET中的类模型完整的理论之外,ValueType的构造函数不存在。

永远不会调用ValueType类的构造函数,因为值类型永远不会被视为类。当您实现一个值类型时,您将其作为struct执行,虽然它可以有一个构造函数,但它与类构造函数不同,并且当您使用{时,ValueType构造函数不会被调用{1}}构造函数。

struct类充当可以在ValueType上使用的方法的容器,编译器处理使struct工作的所有内容,就好像它继承自struct一样}。