03 2011 档案

摘要:1.数组概述 声明数组: CLS要求所有数组都是0基数组。最小索引是0,性能最好的数组,微软为它们优化性能方面做了很多工作。 例如有些特殊的IL指令:newarr、ldelem等等,但是CLS也支持非0基数组。 CLR支持交错数组,但是交错数组不兼容CLS[CLS不允许一个数组的元素是System. 阅读全文
posted @ 2011-03-31 13:25 Timetombs 阅读(817) 评论(0) 推荐(0)
摘要:1.Enum 枚举是定义了一组符号名称和数值对,如下: 枚举类型使程序更见容易阅读、编写和维护。每个枚举类型默认继承自 System.Enum,属于值类型,但是枚举不能定义任何方法、属性[本质 也是方法嘛]和事件。实际上枚举被编译时会把其中的每个符号转变为类型的一个常量字段,也就是0,1,2...会 阅读全文
posted @ 2011-03-30 18:45 Timetombs 阅读(763) 评论(0) 推荐(0)
摘要:1.实例构造器[.ctor] 默认情况下,对于引用类型,如果我们没有显示的定义实例构造器,则C#编译器会为我们定义一个无参的公有实例构造器。 一个类的实例构造器在访问基类的继承字段之前,必须调用基类的实例构造器,C#编译器会自动产生对基类默认构造器的调用代码。 特殊情况下类型实例的创建不会调用实例构 阅读全文
posted @ 2011-03-29 18:10 Timetombs 阅读(840) 评论(0) 推荐(0)
摘要:1.无参属性 当定义一个属性时,编译器会在生成的托管模块中产生一下3项: 1:get访问器方法,定义get时才有; 2:set访问器方法,定义set时才有; 3:关于属性的元数据,这项总是存在; 这写元数据信息中包括一些标记和属性类型,并有一个对get和set访问器方法的引用,仅仅为属性和它的访问器 阅读全文
posted @ 2011-03-29 13:28 Timetombs 阅读(691) 评论(0) 推荐(0)
摘要:1.对象的等值性和唯一性 Object的Equals[虚]方法判断两个对象是否相等; Object.ReferenceEquals判断两个对象是否指向同一引用[严格意义上的相等、对象的唯一性]。 2.对象的散列码 Object的GetHashCode[虚]方法返回一个Int32类型的散列码,当重写E 阅读全文
posted @ 2011-03-29 13:06 Timetombs 阅读(780) 评论(0) 推荐(0)
摘要:1.基元类型 编译器直接支持的数据类型成为基元类型。基元类型与FCL中的类型有直接的映射关系[int=Int32],这样我们可以简化的方式书写代码,并且编译后的IL和直接使用FCL中的数据类型是完全相同的。 Checked和Unchecked操作: CLR只在32位和64位上进行算数运算,所以b首先 阅读全文
posted @ 2011-03-29 12:33 Timetombs 阅读(737) 评论(0) 推荐(0)
摘要:1.System.Object CLR要求每个类型都要继承自System.Object[直接或者间接方式],如果不显示继承,编译器会自动为我们添加对System.Object的继承。 System.Object提供几个公有实例方法: Equals:如果两个对象具有相同的值,返回true; GetHa 阅读全文
posted @ 2011-03-29 11:38 Timetombs 阅读(1030) 评论(0) 推荐(0)
摘要:1.DEMO 使用匿名类型: 这个会输出什么呢?是someType的类型完全限定名吗?非也...看图: 我们都知道Console.WriteLine会去调用参数的ToString方法,那么可以肯定匿名类型someType重写了ToString方法。那么如果我再上面的基础上再加上一个匿名类型,只不过把 阅读全文
posted @ 2011-03-27 19:01 Timetombs 阅读(642) 评论(0) 推荐(0)
摘要:1.对象初始化器 首先声明一个类Person: 初始化它并调用它: 这是编译器的一个小技巧:IL代码显示它和一般的初始化操作效果完全相同。{}里面出现的必须是共有的成员,字段或者属性。 可以支持对象初始化器的类型要满足一个条件是要有一个公有的无参的构造函数。 2.集合初始化器 这个有必要看看IL代码 阅读全文
posted @ 2011-03-27 16:28 Timetombs 阅读(1864) 评论(0) 推荐(2)
摘要:1.DEMO var关键字,用来声明并初始化局部变量。编译器根据=右边的语句推断出变量实际的类型。 所以使用var的要求就是右边的语句必须可以让编译器推断出实际的类型。所以=号右边是必须要有值的,即是必须要初始化,不能只是声明。 但是有些不便于阅读代码了。于此同时,C#3.0的出现另一个新特性[匿名 阅读全文
posted @ 2011-03-27 15:16 Timetombs 阅读(792) 评论(0) 推荐(0)
摘要:1.从DEMO开始 先看一个扩展方法的例子: 为一个类型扩展一个方法如此只简单,但是它究竟为我们做了什么呢,为什么我可以调用的AddToOldNum方法?还是让我们从IL代码层面来看看吧。 2.扩展方法剖析 这里是上面代码编译的IL: 发现它和一般的静态方法没什么区别,唯一不同的是多了一行调用[Sy 阅读全文
posted @ 2011-03-27 14:28 Timetombs 阅读(745) 评论(0) 推荐(0)
摘要:一个简单的C#从控制台程序代码如下: 一行一行说起吧: 引入命名空间,其中本程序只用到了System下的Console静态类。并未使用System.Text命名空间,所以编译器不会把System.Text这个东东也塞到编译后的IL中。如果看着不顺眼的话【选择全部using行,右键》组织using》移 阅读全文
posted @ 2011-03-27 14:05 Timetombs 阅读(896) 评论(0) 推荐(0)