似乎无趣,但我正在学习C#并且正在查看ValueType类。它在这里说http://msdn.microsoft.com/en-us/library/system.valuetype.valuetype(v=vs.110).aspx,构造函数的语法是受保护的ValueType()'。
我的问题是我在哪里可以在源代码中看到这个构造函数?我环顾四周,无法找到它。我找到的最近的东西是' Type Class',但是我无法识别类ValueType和类Type之间的连接...
答案 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
用于枚举)。它为Equals
和GetHashCode
提供了不同的默认实现,就此而言。这些方法是虚拟的,并且在类层次结构中为盒装值类型插入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
一样}。