In addition to the MSIL, the assembly file also contains metadata. Metadata is a set of tables that are embedded in the assembly file. These tables are produced by the compiler and contain a great deal of information about the application. For example, metadata has tables that describe all of the types, methods, and fields that were defined by the application's source code. In addition, metadata also includes tables that describe all of the types, methods, and fields that are referenced by methods in the application's source code. Metadata is very complete and is always embedded in the assembly file ensuring that the metadata and the MSIL it describes are always in sync with one another.
Type Fundamentals
Introduction
In this section we explore the fundamentals of types in the CLR. Specifically, we look at behaviors that are guaranteed to exist for all objects. We also look at the casting and type safety and the imporance this this has in the CLR. Finally, we look at the two kinds of types offerred by the CLR: references and value types and how to manipulate these types.
All Types are Derived from the System.Object Base Type
The CLR requires that every type is ultimately derived from the System.Object type. Having all types derive from System.Object guarantees that every object of every type offers a minimum set of capabilities. Specifically, the System.Object class offers the following instance methods:
• Equals (public, virtual): Allows two objects to be compared for value equality.
• GetHashCode (public, virtual): Allows a type to calculate and return a 32-bit signed integer hash code for its objects. This is typically used for storing objects in a hashtable.
• ToString (public, virtual): Allows a type to return a string that represents the object’s value.
• GetType (public, non-virtual): Returns an object that represents the Type of the object. This object can be used with Reflection.
• MemberwiseClone (protected, non-virtual): Allows the type to construct a new instance that is a bitwise clone (shallow copy) of itself.
• Finalize (protected, virtual): Allows the type’s objects to gracefully cleanup and release resource when the object is garbage collected. See the Memory Management QuickStart for more info.
The sample program illustrates how to create a very simple type and how it is possible to call the public methods defined by System.Object using an instance of this simple type.
Casting an Object from One Type to Another
One of the most important features of the CLR is its type safety. The CLR always knows what type an object is. You can always discover an object's exact type by calling the GetType method. Since this method is non-virtual, a type cannot ever spoof another type: a Foo type cannot override the GetType method and return that it is a Bar type, for example.
參考答案:除MSIL 之外, 汇编文件并且包含metadata 。Metadata 是被埋置在汇编文件的一套桌。这些桌由编译器生产和包含关于应用的很多信息。例如, metadata 有描述所有型, 方法, 和领域由application's 原始代码定义的桌。另外, metadata 并且包括描述所有型, 方法, 和领域由方法参考在application's 原始代码的桌。Metadata 是非常完全的和总被埋置在汇编文件保证, 它描述的metadata 和MSIL 互相总是在sync 。
键入根本性 介绍 我们探索根本性的这个部分输入CLR 。具体地, 我们看被保证为所有对象存在的行为。我们看铸件和并且键入安全并且imporance 这这有在CLR 。终于, 我们看这二型offerred 由CLR: 参考和价值类型和怎么操作这些型。 所有型从System.Object 基本的类型被获得 CLR 要求, 每型从System.Object 类型最后被获得。有所有型从System.Object 获得保证, 每型每个对象提供极小的套能力。具体地, System.Object 组提供以下事例方法:
均等(公众, 真正): 允许二个对象被比较为价值平等。
GetHashCode (公众, 真正): 允许型计算和退回32 位签字的整数回锅碎肉代码为它的对象。这典型地被使用为存放对象在hashtable 。
ToString (公众, 真正): 允许型退回代表object..s 价值的串。
GetType (公众, 非真正): 退回代表对象的型的对象。这个对象可能被使用以反射。
MemberwiseClone (保护, 非真正): 允许型修建是bitwise 克隆的一个新事例(浅拷贝) 本身。
完成(保护, 真正): 优美地允许type..s 对象对清洁和发行资源当对象是垃圾被收集。看内存管理QuickStart 为更多信息。 抽样程序说明怎么创造非常简单的型并且怎么它是可能称公开方法由System.Object 定义使用这简单的型事例。 熔铸一个对象从一型到另一个 CLR 的最重要的特点的当中一个是它的型安全。CLR 总知道什么型对象是。您能总发现object's 确切的类型由叫GetType 方法。因为这个方法是非真正的, 型无法曾经欺骗其它型: Foo 类型无法忽略GetType 方法和返回, 这是酒吧类型, 例如