CLR via C#深解笔记六 - 泛型】的更多相关文章

面向对象编程一个好处就是“代码重用”,极大提高了开发效率.如是,可以派生出一个类,让它继承基类的所有能力,派生类只需要重写虚方法,或添加一些新的方法,就可以定制派生类的行为,使之满足开发人员的需求. 泛型(generic)是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”.   简单地说,开发人员先定义好一个算法,比如排序.搜索.交换.比较或转换等.但是,定义算法的开发人员并不设定该算法要操作什么数据类型:该算法可以广泛地应用于不同类型的对象.然后,另一个开发人员只…
实例构造器和类(引用类型) 构造器(constructor)是允许将类型的实例初始化为良好状态的一种特殊方法.构造器方法在“方法定义元数据表”中始终叫.ctor. 创建一个引用类型的实例时: #1, 首先为实例的数据字段分配内存 #2, 然后初始化对象的附加字段(类型对象指针和同步块索引) #3, 最后调用类型的实例构造器来设置对象的初始状态   构造引用类型的对象时,在调用类型的实例构造器之前,为对象分配的内存总是先被归零.构造器没有显示重写的所有字段保证都有一个0或null值.和其它方法不同…
编程语言的基元类型   某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32();  // a = 0 a = 1;   等价于: int a = 1; 这种语法不仅增强了代码的可读性,其生成的IL代码与使用System.Int32时生成的IL代码是完全一致的.   编译器直接支持的数据类型称为基元类型(primitive type).基元类型直接映射到Framework类库(FCL)中存在的类型.如C#中,i…
每个应用程序都要使用这样或者那样的资源,比如文件.内存缓冲区.屏幕空间.网络连接.数据库资源等.事实上,在面向对象的环境中,每个类型都代表可供程序使用的一种资源. 要使用这些资源,必须为代表资源的类型分配内存.   访问一个资源所需的具体步骤如下: #1,调用IL指令newobj, 为代表资源的类型分配内存.C#中使用new操作符,编译器就会自动生成该指令. #2,初始化内存,设置资源的初始状态,使资源可用.类型的实例构造器负责设置该初始状态. #3,访问类型的成员(可根据需要反复)来使用资源.…
事件处理实际上是一种具有特殊签名的delegate, 像这个样子:public delegate void EventHandler(object sender, EventArgs e);   类型定义事件成员,就可以通知其他对象发生了特定的事情.如果定义一个事件成员,意味着类型要提供一下能力: #1,方法可登记也可注销它对该事件的关注 #2,该事件发生时,登记了的方法会收到通知.   类型之所以能够提供事件通知功能,是因为类型维护了一个已经登记方法的列表.事件发生后,类型将通知列表中所有已登…
类型基础 所有类型都从System.Object派生   CLR要求所有对象都用new 操作符来创建. Employee e = new Employee("Constructor Parameters");   以下是 new 操作符所做的事情: #1, 计算类型及所有基类型(一直到System.Object, 虽然它没有定义自己的实例字段)中定义的所有实例字段需要的字节数. 堆上的每个对象还需要一些额外(overhead 开销成员)的成员 -- 即“类型对象指针”(type obj…
写在前言   .Net Framework并不是Win 32 API 和COM上的一个抽象层.   某种程度上,它是自己的操作系统,有自己的内存管理器,自己的安全系统,自己的文件加载器,自己的错误处理机制,自己的应用程序隔离边界(AppDomains),自己的线程处理模型等. 随着多核计算机越来越普遍,线程处理,并发执行,并行结构,同步等方面的重要性日益凸显.   CLR的执行模型   公共语言运行时 CLR Common Language Runtime 是一个运行时环境,保证应用和底层操作系…
第十二章 泛型 2014-06-15 初始泛型 12.3 泛型基础结构 12.3.1 开放类型与封闭类型 12.3.2 泛型类型和继承 12.3.3 泛型类型同一性 12.3.4 代码爆炸 12.6 委托和接口的逆变和协变泛型类型实参 12.7 泛型方法 12.7.1 泛型方法和类型推断 12.9 可验证性合约束 12.9.1 主要约束 12.9.2 次要约束 12.9.3 构造器约束 参考 初识泛型[1][2] 返回 泛型(generic)是CLR和编程语言提供一种特殊机制,它支持另一种形式的…
在学习继承的时候, 我们已经知道可以将一个子类的对象赋值给其父类的对象, 也就是父类引用指向子类对象, 如: Object obj = new Integer(10); 这其实就是面向对象编程中的is-a关系. 既然上面的代码正确, 那么在泛型中, 也可以使用如下代码: public class Box<T> { private T obj; public Box() {} public T getObj() { return obj; } public void setObj(T obj)…
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessController的checkPerssiom方法,访问控制器AccessController的栈检查机制又遍历整个 PerssiomCollection来判断具体拥有什么权限一旦发现栈中一个权限不允许的时候抛出异常否则简单的返回,这个过程实际上比我的描述要复杂 得多,这里我只是简单的一句带过,因为这…