一 类的修饰符:
C#中类的默认修饰符是internal。
1 private 只有对包.NET中的应用程序或库才能访问。
2 public 不限制对类的访问。
3 protected 只可以被本类和其继承子类访问;
4 internal 只可以被本集合(Assembly)内所有的类存取。集合是C#语言中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名往往 是“.DLL”或“.EXE”。 仅为同项目(这里的项目是只单独的项目,而不是整个解决方案)调用。
5 protected internal 唯一的一种组合限制修饰符,它只可以被本集合体内所有的类和这些类的继承子类所存取。(注意:提供的不是internal且protected访问方式)
6 abstract 抽象类,表示该类只能作为父类被用于继承,而不能进行对象实例化。抽象类可以包含抽象的成员,但这并非必须。abstract不能和new同时用。
7 sealed 密封类,阻止该类被继承。同时对一个类作abstract和sealed的修饰是没有意义的,也是被禁止的。
8 new 修饰符只能用于嵌套的类,表示隐藏了由基类继承来的、与基类中同名的成员和方法。
注:如果不是嵌套的类,命名空间或编译单元内的类只有public和internal两种修饰。
二 成员访问修饰符
类成员和结构成员的默认访问修饰符是private。
1 private 私有类型成员只能从定义它的类型中访问。类成员和结构成员缺省时为私有。
2 public 公有类型或类型成员能从程序的任何地方访问。
3 protected 受保护类成员只可以被本类和其继承子类访问。(?在外部集合是否可以访问?)
4 internal 内部受保护类成员只可以被定义它的所在集合(Assembly)内所有的类存取。集合是C#语言中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名 往往是“.DLL”或“.EXE”。 仅为同项目调用(这里的项目是指单独的项目,而不是整个解决方案)。
5 internal protected 唯一的一种组合限制修饰符,它只可以被本集合体内所有的类和这些类的继承子类所存取。(注意:提供的不是internal且protected访问方式)
6 override用于成员函数,说明本函数覆盖父类中的同名函数。调用时系统会在整个继承结构中找到最具体的类并执行此最具体类中的函数,不管当时的对象是保存在哪一个层次的类对象中。这是错的,调用时会找到本对象类型之前最后被定义的那个函数。
7 new 用于成员函数,说明本函数隐藏父类中的同名函数。从此之后本函数不再处于父类同名函数的继承结构体系中,就如同在本类中定义了一个全新的不同名函数一样。
8 virtual 虚方法 用于成员函数,说明本函数可以在子类中被改写,也可以被隐藏,如果子类中没有重定义该函数,那就使用父类的函数体。除了静态方法外,非静态属性和非静态索引器也能声明为virtual。其他的函数成员不能声明为virtual,因而也不能被覆盖。(注意:一个虚方法不能为私有) abstract:抽象方法(C++中的纯虚函数)必须定义在抽象类中,但抽象类不一定要有抽象方法。一个abstract函数总是一个virtual函数。 其实这也很好理解,抽象方法只有声明不能有定义,含有抽象方法的类如果可以被实例化无法保证抽象方法的行为,所以必须阻止其实例化。同时抽象方法的意义也就在于在子类中定以实现多态,所以抽象方法必须放在抽象类中,抽象类不可以被实例化。 定义virtual方法后子类同名方法自动为虚方法,不写virtual也是。
9
extern 修饰符用于声明在外部实现的方法。
extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 特性一起使用(调用DDL等)。在这种情况下,还必须将方法声明为 static,如下示例所示:
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();