CLR vir C# 之类型与成员基础

     1.Class的可见性分为public和internal.

          public:在任意assembly中可见,internal:仅在所在Assembly中可见。

          如果不做定义,默认为Internal.

     2.成员的访问级别

          访问级别的定义在C#和CLR中的定义有所不同。

    

CLR术语 C#术语
Private private
Family protected
Family and Assembly 不支持
Assembly internal
Family or Assembly protected internal
Public public

 

     成员默认为Private(私有)。

     对于继承关系的类之间,C#规定继承类重写父类方法,访问级别必须一致。而CLR则没有此限制,只要求重写方法的访问级别高于虚方法即可。

     3.静态类

     Static用来定义静态类。静态类通常用来定义一组具有相同使命的方法(或属性等成员),这些方法当然必须都是静态的,public的。

     比如Math, Console等类的使用。

     Static只能用于Class,不能用于Struct.

     静态类不能被实例化,直接继承与System.Object.不能实现任何接口;

     从MSIL可见,静态类编译为IL后,以abstract sealed定义出现。

     4.部分类,结构,接口

     通常在出现下面情况时,会用到partial关键字。

     1)多人同时开发时。此时可把一个类,写在多个文件中,供多人同时开发。

     2)winform, webform的实现机制。当我们拖动控件时,vs帮我们把自动生成的代码放在单独的文件中(.desinger.cs),而对于后台编程代码放在另一个单独文件中,单可以看到,他们是属于一个类的,用Partial标记。

     要说明的是,partial只在C#中定义,CLR不知道它的存在。所以同一类型的源码应该用统一编程语言实现。

      5.IL指令:Call,Callvirt

     可以在类型中定义静态方法,虚方法,实例方法。

     当在程序中调用这些方法时,会在IL中调用相应的IL指令。

     通常,call指令可以调用静态方法,虚方法,实例方法;callvirt可以调用虚方法和实例方法,callvirt调用前会进行为空性检查,性能比call要差些。

     C#中,静态方法由call调用,虚方法和实例方法由callvirt调用。

     

Code

 MSIL:

Code

     

posted on 2008-09-03 17:30  easy2Dev  阅读(449)  评论(0编辑  收藏  举报

导航