CLR
文章平均质量分 85
kendezhu
这个作者很懒,什么都没留下…
展开
-
基元类型、引用类型和值类型
编译器直接支持的数据类型称为基元类型。基元类型直接映射到Framework 类库(FCL)中存在的类型。比如C#中,int直接映射到SystemInt32类型。 C#基元类型与对应的FCL类型 sbyte System.Sbyte 有符号8位值 -128~127 byte System.Byte 无...原创 2011-08-26 22:46:03 · 208 阅读 · 0 评论 -
委 托
回调函数是一种非常有用的编程机制,它的存在已经有很多年了。.NET通过委托delegate来提供了一种回调函数机制。委托还允许顺序调用多个方法,并支持调用静态方法和实例方法。 我们先来看看如何使用委托: delegate void FeedBack(int value); class Program { static void Main(str...原创 2012-12-31 16:30:58 · 188 阅读 · 0 评论 -
字符、字符串和文本处理
字符 http://www.cnblogs.com/bitfan/archive/2010/11/25/1887590.html 在.NET Framework中,字符都是用16位unicode编码(utf-16)【视频 unicode字符编码查询(它这个编码方式是utf-16的Big Endian,具体可看最上面的链接) unicode字符编码表(十进制0~127是与ASCII字符集(占...原创 2012-03-24 18:10:09 · 576 阅读 · 0 评论 -
接 口
CLR不支持多继承(因而所有托管编程语言也不支持)。CLR只是通过接口提供了"缩水版"的多继承。 接口可以定义事件、无参属性、索引器,这些东西本质上都是方法,它们只是对语法的一种简化而已。接口不能定义构造器方法,不能定义实例字段。虽然CLR允许接口定义静态方法、静态字段、常量、静态构造器,但C#禁止接口定义这些静态成员。 对于一个接口方法(类继承接口所实现的方法)C#编译器要求接口...原创 2012-02-20 21:03:26 · 126 阅读 · 0 评论 -
泛 型
面向对象的编程方式有一种好处是“代码重用”,泛型是CLR和编程语言提供的一种特殊机制,它支持另一种形式的重用,即“算法重用”。 比如,一个开发人员定义好一个算法,如排序、搜索、交换、比较或者转换等。但是,定义算法的开发人员并不设定该算法要操作什么数据类型;该算法可以应用于不同类型的对象。然后,另一个开发人员只要指定了算法要操作的具体数据类型,就可以开始使用这个现成的算法了。例如,可以用一个排序算...原创 2012-02-12 15:39:44 · 104 阅读 · 0 评论 -
属性
属性允许源代码用一个简单的语法来调用一个方法。CLR支持两种属性:无参属性 和 有参属性(C#里称为 索引器) 无参属性 数据封装是面向对象设计和编程中的一个重要的原则,它意味着类型的字段永远不应该公开,应为这样很容易写出不恰当的使用字段的代码,从而破坏对象的状态。 如: public class Employee{ public String Name; public Int32...原创 2011-11-20 15:34:55 · 84 阅读 · 0 评论 -
数 组
所有数组类型都隐式地从System.Array抽象类派生,后者又派生自System.Object。这意味着数组是在托管堆上进行分配的。 对于0基数组,Microsoft花了大量的时间来优化它们的性能,而且0基数组符合CLS(公共语言规范here),所以它将支持跨语言移植,如可用C#创建一个数组,然后将该数组的引用传给另一种语言写的代码。 从上图中可以看到,每个数组都关联了一些额外的开销信息...原创 2012-05-23 11:49:51 · 162 阅读 · 0 评论 -
枚举类型和位标识
枚举类型定义了一组 “符号/值” 配对 namespace XXX { internal enum Color { White, //赋值0 Red, //赋值1 Green, //赋值2 Blue, //赋值3 Orang...原创 2012-05-16 12:52:18 · 268 阅读 · 0 评论 -
事 件
现在让我们来讨论类型中可定义的最后一种成员:事件 类型之所以能提供事件通知功能,是因为类型维护了一个已登记方法的列表。事件发生后,类型将通知列表中所有已登记的方法。 CLR的事件模型建立在委托的基础上。 现在我们来描述一个场景,一个电子邮件系统,当电子邮件到达时,可以将该邮件转发给传真机处理。因此,我们需要先设计一个MailManager类,它负责接受传入的邮件,它维护了一个已登记方法的列表...原创 2011-12-25 17:54:30 · 127 阅读 · 0 评论 -
CLR类型基础
people p=new people() 以上面例子为例当我们用new操作符实例化一个类时,它是这样做的: 1.计算该类型及其所有基类的实例字段所需要的字节数,及该对象的额外对象(类型对象指针,同步索引块)的字节数。 2.根据该对象的大小在托管堆上分配同等大小的空间。 3.初始化对象的类型对象指针和同步索引块。 4.调用该类型的实例构造函数,在此实例构造函数中会调用该类的所有基类...原创 2011-08-15 00:11:24 · 355 阅读 · 0 评论 -
CLR的执行模型
CLR(Common Language Runtime)公共语言运行时:是一个可由多种编程语言使用的"运行时"。 所有面向CLR的语言都可以使用CLR的核心功能,如:内存管理,程序集加载,安全性,异常处理,线程同步等。CLR使用异常来报告错误,这些语言都能通过异常来报告错误。CLR允许创建线程,这些语言也能创建线程。 不同语言有自己的编译器,这些编译器可以被看成是语法检查器和"正确代码"的分析...原创 2011-08-01 14:57:24 · 122 阅读 · 0 评论 -
参 数
以引用的方式向方法传递参数 默认情况下,CLR假定所有方法都是传值的。对于值类型的实例来说,很好理解,就是传给方法这个实例的副本。对于引用类型来说,我说其实传的也是一个副本,只不过这是引用的副本,但由于这个副本也是指向这个引用类型的实例,所以我们在方法中对这个引用的副本所指向的实例的修改都是修改的是实例本身。如面代码就是修改引用的副本指向的对象: public y...原创 2011-10-22 15:30:56 · 108 阅读 · 0 评论 -
方法
实例构造器和类(引用类型) 构造器(constructor)是允许将类型的实例初始化为良好状态的一种特殊方法。 创建一个引用类型的实例时,首先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步索引块),最后调用类型的实例构造器来设置对象的初始状态。 和其他方法不同,实例构造器永远不能被继承。 类的实例构造器在访问从基类继承的任何字段之前,必须先调用基类的构造器。如果派...原创 2011-10-07 15:09:07 · 95 阅读 · 0 评论 -
常量和字段
定义常量符号时,它的值必须能在编译时确定。确定之后,编译器将常量的值保存到程序集的元数据中。这意味着只能为编译器认定的基元类型定义常量。在C#中,以下类型都是基元类型,可以定义常量:Boolean、Char、Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、Single、Double、Decimal、String。 由于常...原创 2011-10-06 15:30:27 · 117 阅读 · 0 评论 -
类型和成员基础
常量通常与类型关联,而不与类型的实例关联。从逻辑上讲,常量始终是静态成员。 CLR要求接口类型的所有成员都具有public可访问性。编译器会自动将所有成员的可访问性设为public。 一个派生类重写在它基类型中定义的成员时,C#编译器要求原始成员和重写成员具有相同的可访问性。也就是说,如果基类的成员是protected的,派生类中的重写成员也必须是protected的。但这只是C#...原创 2011-09-17 22:16:34 · 105 阅读 · 0 评论 -
定制 attribute
现在让我们来讨论Microsoft .Net最具创意的技术之一:定制attribute。相信很多人都用过,例如在使用很多.Net技术时(例如:Windows窗体、Web窗体、XML Web服务等等)。利用定制attribute,可以声明性地为自己的代码添加注解,从而实现一些特殊功能。定制attribute允许将定义的信息应用于几乎每一个元数据的记录项(如:类型TypeDef[类、...原创 2013-02-15 13:13:34 · 211 阅读 · 0 评论