读经典——《CLR via C#》(Jeffrey Richter著) 笔记_通过ILDasm.exe查看编译器如何将类型及其成员编译成元数据

【实例代码】

using System;
public sealed class SomeType                          //-------------1
{
    //嵌套类
    private class SomeNestedType{}                      //-------------2

    //常量、只读字段和静态可读/可写字段
    private const Int32 SomeConstant = 1;             //-------------3
    private readonly Int32 SomeReadOnlyField = 2;      //-------------4
    private static Int32 SomeReadWriteField = 3;      //-------------5

    //类型构造器
    static SomeType(){}                                  //-------------6

    //实例构造器
    public SomeType(Int32 x){}                          //-------------7
    public SomeType(){}                               //-------------8

    //实例方法和静态方法
    private String InstanceMethod(){return null;}     //-------------9
    public static void Main(){}                       //-------------10

    //实例属性
    public Int32 SomeProp                             //-------------11
    {
        get{return 0;}                                //-------------12
        set{}                                         //-------------13
    } 

    //实例有参属性(索引器)
    public Int32 this[String s]                       //-------------14
    {
        get{return 0;}                                //-------------15
        set{}                                         //-------------16
    }

    //实例事件
    public event EventHandler SomeEvent;               //-------------17
}

【ILDasm.exe 查看上文代码编译的元数据】

下面这个是书上的截图,序号对应着看就行

时间: 2024-10-05 05:31:58

读经典——《CLR via C#》(Jeffrey Richter著) 笔记_通过ILDasm.exe查看编译器如何将类型及其成员编译成元数据的相关文章

读经典——《CLR via C#》(Jeffrey Richter著) 笔记_运行时解析类型引用

public sealed class Program{ public static void Main() { System.Console.WriteLine("Hi"); } } 程序运行时,CLR会加载并初始化它.CLR读取程序集的CLR头,查找标识了应用程序入口方法(Main)的MethodDefToken.然后,CLR会检索MethodDef元数据表,找到该方法的IL代码在文件中的偏移量,把这些IL代码JIT(just-in-time)编译成本地(native)代码.编译时

读经典——《CLR via C#》(Jeffrey Richter著) 笔记_高级管理控制(配置)

一个应用程序的XML配置文件示例: <?xml version="1.0"?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="AuxFiles;bin\subdir" /> <dependentAssembly>

读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型

[概念] 编译器直接支持的数据类型 [C#基元类型与对应的 FCL 类型] C#基元类型 FCL 类型 说明 sbyte System.Sbyte 有符号8位值 byte System.Byte 无符号8号位值 short System.Int16 有符号16位值 ushort System.UInt16 无符号16位值 int System.Int32 有符号32位值 uint System.UInt32 无符号32位值 long System.Int64 有符号64位值 ulong Syst

读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型(二)

[基元类型推荐] 推荐直接使用 FCL 类型. [理由] 编码时不至于困惑string与String的使用.由于C#的stirng(一个关键字)直接映射到System.String(一个 FCL 类型),所以两者没有区别,都可以使用.不至于困惑int在32位操系统和64位操作系统上代表的整数不同. 有的开发人员认为int在32位操作系统上运行时,代表32位整数:而在64位操作系统上运行时,代表64位整数,这个观点完全错误.在C# 中,int 始终映射到System.Int32,所以不管在什么操作

读经典——《CLR via C#》(Jeffrey Richter著) 笔记_命名空间和程序集的关系

命名空间和程序集不一定相关 1. 同一个命名空间中的各个类型可能是在不同的程序集中实现的.(System.IO.FileStream在MSCorLib.dll程序集中,而System.IO.FileSystemWatcher在System.dll程序集中) 2. 同一个程序集中,也可能包含不同命名空间中的类.(System.Int32和System.Text.StringBuilder类型都在MSCorLib.dll程序集中)

读经典——《CLR via C#》(Jeffrey Richter著) 笔记_类型转换(一)

1. C# 不要求任何特殊语法即可将一个对象转换为它的任何基类型,因为向基类型的转换被认为是一种安全的隐式转换: 2. 然而,将对象转换为它的某个派生类型时,C#要求开发人员只能进行显示转换,因为这样的转换可能在运行时失败: 例子: internal class Employee{ ... } public sealed class Program { public static void Main() { //不需要转型,因为new返回一个Employee对象, //而Object是Emplo

读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型(三)

[checked 和 unchecked 基元类型操作] 1.第一种使用方式 UInt32 invalid = unchecked((UInt32) (-1)); //OK,不会抛异常 Byte b = 100; b = checked((Byte) (b + 200));//抛出OverflowException异常 2.第二种使用方式 checked {//开始一个checked块 Byte b = 100; b = (Byte) (b + 200);//该表达式会进行溢出检查 }//结束一

读经典——《CLR via C#》(Jeffrey Richter著) 笔记_类型的各种成员

[Class中,可能包含的成员] 常量, 字段, 实例构造器, 类型构造器, 方法, 操作符重载, 转换操作符, 属性, 事件, 类型(Class)

读经典——《CLR via C#》(Jeffrey Richter著) 笔记_对象的相等性和同一性

[重写Equals注意的事项] 1. Equals 必须是自反的:--x.Equals(x)肯定为 true 2. Equals 必须是对称的:--x.Equals(y)肯定返回与y.Equals(x)相同的值 3. Equals 必须是可传递的:--x.Equals(y)返回true, y.Equals(z)返回true,则x.Equals(z)肯定返回true 4. Equals 必须是一致的.比较的两个值没有变,Equals返回的值(true或false)也不能变 5. 让类型实现 Sys