重温C# clr 笔记总结_C#教程

分享到:

1: .net framework 由两个部分组成:CLR FCL

2:在CLR中,所有错误都是通过异常来报告的。

3:智能感知功能主要是靠解析元数据实现的

4:允许在不同语言之间方便的切换,并对各种语言进行紧密集成是CLR的出色特性。

5:一个方法只有在首次运行时才会由于jit造成一定的性能损失,以后对该方法的调用都以本地代码的形式全速运行。

 

6:方法签名指定了参数的数量(及其顺序),参数的类型;方法是否有返回值,如果有返回值,还要指定返回值的类型。

7:无论使用哪一种语言,类型的行为是完全一致的,因为类型的行为最终由CLR的CTS来定义。

8:使用[assembly:CLSCompliant(true)] 来检查CLS的相容性。

9:在同一程序集中,类型默认是internal,有一个原则是微软总是选择公开程度最低的关键字,比如默认的private。

10:在CLR中一个类型的每个成员要么是一个字段,要么是一个方法。

 

11:应答文件csc.rsp 的作用,使用/noconfig 开关忽略局部和全局csc.rsp.

12:元数据:二进制数据块,由几张表构成:分为3类:a:定义表,b:清单表,c:引用表。

13:一个托管的PE文件由4个部分构成,PE32(+)头,CLR头,元数据,IL。

14:程序集是一个或多个类型定义文件及资源文件的集合。

15:程序集允许我们分离可重用类型的逻辑和物理表示,如果一个程序集没有用到,那么它将永远不会下载。

 

16:为了生成一个新的程序集,来自一个引用程序集的所有文件都必须存在,但运行一个应用程序时,引用的程序集的所有文件不一定要全部存在。

17:程序集的版本号格式:主版本号,副版本号,Build号,Revision号。

18:[assembly:AssemblyCulture(“de-ch”)] 将程序集的语言文化设置为瑞士德语。

19:使用msi文件可以实现“即需安装”。

20:弱命名程序集之所有会成为问题,是因为几个不同的程序集可能具有相同的弱名称。

 

21:“Dll Hell” 根源:共享的Dll全部被复制到System32 目录中,弱命名的名称可能相同,最后安装的会覆盖前面的程序集。

22:之所以能将程序集拖放进GAC 依靠的是windows explorer shell (扩展) shFusion.dll.

23:在命令窗口cmd下,进入gac目录 查看gac的结构。

24:在安装.net framework 时,会安装两套副本,一套编译器/CLR目录,另一套:GAC 子目录。

25:ToString 方法默认反悔this.GetType().FullName.

 

26:GetType方法是非虚方法,这样就可以防止一个类重写该方法,隐瞒其类型,破坏安全性。

27:命名空间和程序集没什么关系

28:堆上的所有对象都包含两个额外的成员:类型对象指针和同步块索引

29:System.Object 的GetType方法返回的是存储在指定对象的“类型对象指针”成员中的地址。

30:GetType方法返回的是指向对象的类型对象的一个指针。

 

31:编译器直接支持的任何数据类型称为基元类型

32:在代表值类型实例的一个变量中,并不包含一个指向实例的指针,相反变量中包含实例本身的字段。

33:文档将所有值类型都称为一个结构 或一个枚举。

34:假如知道自己写的代码会造成编译器反复对一个值类型进行装箱,那么换用手动方式对值类型进行装箱,代码会更小更快。

35:总结第34条:降低调用浪费资源耗费时间多的步骤的次数。

 

36:使用接口的方式可以允许我们更改一个已装箱对象的字段,在C#中,不使用接口的方法是达到这个目的的。因为这个方式有点绕,所以不推荐使用需要修改字段的值类型,在设计模式中,值类型是不变的类型。

37:在内部,ValueType的Equals 方法使用反射技术来完成字段的比较,因为反射比较慢,所以在定义自己的值类型时,应重写Equals方法,不要调用base.Equals.具体的重写步骤如下:

a:如果obj == null

昵    称:
验证码:

相关文档: