第六章 类型和成员基础

1. 类型的各种成员

System.Runtime.CompilerServices.InternalsVisibleToAttribute(string assemblyName)指定通常仅在当前程序集中可见的类型对指定程序集可见.指定友元程序集.assemblyName包含程序集名字和公司公钥.

接口类型必须是Public.如果没有显示声明成员的可访问性,编译器会默认为Private,限制最大的那个.

子类重写基类的方法时,只能放宽访问限制,不能缩小.但C#要求两者必须是一样的.是因为CLr承诺派生类总是可以转型为基类,并获取基类方法的访问权,如果在派生类中进行了更严格的限制了,CLR的承诺就无法兑现了.

2. 分部类

C#编译器提供一个partial关键字,以允许将一个类、结构或接口定义在多个文件里。在编译时,编译器自动将类、结构或接口的各部分合并起来。这仅是C#编译器提供的一个功能,CLR对此一无所知。

3. CLR调用虚方法虚方法

call指令一般调用静态方法和非虚的方式调用虚方法.  (非虚的方式就是直接调用).此指令假定对象不是null.

callvirt一般调用非虚实例方法,和虚方法.在调用前会检查对象时否为null.如果为null会抛出NullReferenceException.

调用虚方法的速度比比调用非虚方法的速度慢.

编译器调用由值类型定义的方法时,会倾向于使用call指令.

posted @ 2013-12-05 18:30  平常心队长  阅读(126)  评论(0编辑  收藏  举报