CLR Via C# 3rd 阅读摘要 -- Chapter 6 - Type and Member Basics

 The Different Kinds of Type

1. 类型成员的不同种类:

  • 常量。逻辑上,常量总是静态成员;
  • 字段。类型状态的一部分;
  • 实例构造器;
  • 类型构造器。也叫静态构造器...;
  • 方法;
  • 重载操作符。方法的一种,但是操作符重载方法不是CLS的一部分;
  • 转换操作符。显式的和隐式的,也不是CLS的一部分;
  • Properties ;
  • 事件;
  • 类型。嵌套类型。

2.  在代码中定义的所有成员,编译器都会生成相应的元数据。 

 Type Visibility

1. Type的可见性:public,internal(缺省的)

2. 友元程序集。System.Runtime.CompilerServices.InternalVisibleTo属性。友元程序集可以访问程序集中所有的internal类型的internal成员; 

3. 友元程序集仅仅用于这些程序集以同样的计划装配甚至装配在一起。最好考虑在LinkDemand时以StrongNameIdentifyPermission来限制访问。 

 Member Accessibility

1. 不支持Family and Assembly。

 

2. C#的限制,基类和继承类中成员的访问性应该保持一致。如果一个成员在基类中是protected的,那么在继承类中该成员必须也是protected的。但CLR并不是这样限制的,CLR只允许继承类保持或提升成员的可访问性,而不能降低。也就是基类中如果成员是protected,那么继承类中可以是public,但不能是private。 

 Static Classes

1. 静态类static class的限制:

  • 必须直接从System.Object继承,不能创建一个静态类的实例;
  • 不实现任何接口,因为接口方法只能通过类的实例来调用;
  • 静态类中只能定义静态成员;
  • 静态类不能用作别的类型的字段、方法的参数、局部变量,因为这些变量将引用到一个实例, 这是不允许的。

2. 静态类中没有.ctor。

 Partial Classes,Structures,and Interfaces

1. partial 部分类,结构,和接口,就是这些类型的定义放在不同的代码文件中;

2. 这样做的三个理由:

  • 多人协同时的源文件控制;
  • 区分不同的逻辑单元;
  • 更好使用的代码片段。 

 Components, Polymorphism,and Versioning

1.  组件的一些特征:

  • 组件是用来发布的;
  • 组件有个标识;
  • 组件永远管理它的标识;
  • 组件清楚的指出了它依赖哪些东西(reference metadata tables);
  • 组件记录了它的类和成员;
  • 组件必须指出它需要的安全权限,CAS;
  • 组件发布的接口(包括对象模型)不会被任何服务改变。 

2. 版本号(major.minor.build.revision),但是CLR并不是通过major.minor来处理加载,而是major.minor.build.revision,除非做了重定向绑定;

3. C#的关键字以及它们如何影响组件的版本。

 

4. CLR提供两种IL指令来调用方法:

  • call用于调用静态,实例,虚拟方法。call不假定this不是null,不做检查。call还经常用来以非虚拟的方式调用虚拟方法;
  • callvirt用来调用实例方法,虚拟方法,不能调用静态方法。call需要检查this是否为null。callvirt效率比call要低很多。 

5. 一些指南性规则:

  • 尽量少定义虚拟方法;
  • 尽量使用sealed类定义;
  • 数据字段使用private;
  • 格言:事情变的复杂起来的时候,定义更多的类。 

6. 不能seal Finalize方法。 

 本章小结

 本章讲了类型和成员的一些基本概念:类型成员的种类;类型和成员的可见性;静态类的特征;部分类型的用法和优点;CLR调用的两种方式;最后给出了定义类时的一些建议。

 

posted @ 2010-03-19 15:35  bengxia  阅读(255)  评论(0编辑  收藏  举报
无觅相关文章插件,快速提升流量