C#中class的修饰符
1、用于关键字class的修饰符
1)internal 默认修饰符,指定类为内部的,只有当前工程中的代码才能访问它
2)public 指定类为公共的,其它工程中的代码也可以访问它
3)abstract 指定类为抽象的,不能实例化,只能继承,可以有抽象成员
4)sealed 密封的,不能继承
其中,internal和public是一对互斥关系,abstract和sealed是一对互斥关系,两对之间可以互相搭配使用。
默认类定义如下:
class A{}即相当于internal class A{},internal通常是省略的。
2、用于关键字interface的修饰符
1)public和private 这对访问修饰符和关键字class的定义是一样的,由于接口的公共特性通常使用public
2)abstract和sealed 这对修饰符不能在接口中使用,因为它们对接口毫无意义
当定义派生类时,如果同时有基类和接口,那么先写基类再写接口,用逗号分开,只能继承一个基类但可以有多个接口,如:
class DerivedClass:BaseClass,IInterface1,IInterface2
{}
接口定义和继承如下:
public interface IMyInterface:IInterface1,IInterface2
{}
3 、用于类成员(包括字段、属性、方法)的修饰符
1)public--成员可以由任何代码访问
2)private--成员只能由本类中的代码访问(默认值)
3)internal--成员只能由定义它的工程(装配件)内部的代码访问
4)protected--成员只能由类或派生类中的代码访问
最后两个关键字可以合并使用,即protected internal,只能由工程(装配件)中类和派生类的代码访问。此外与以上关键字并行的还有static,表示类的静态成员,而不是类的实例成员。字段还可以定义为realonly,只能在定义时或构造函数中赋值并赋值后不可更改。
4、类方法还有另外的关键字定义
1)virtual--方法可以重写
2)abstract--方法必须重写(只用于抽象类中,如果类方法定义了abstract则class也必须追加abstract)
3)override--方法重载了一个基类方法(如果方法被重载则必须使用该关键字)
4)extern--方法定义在其他地方
另:派生类的类方法还可以使用new来隐藏基类方法;通过this指向当前类实例引用,通过base关键字指向基类实例引用。
none or internal 类只能在当前的工程中访问
Public 类可以在任何地方访问
abstract or internal abstract 类可以在当前的工程中访问,不能实例化,只能继承
Public abstract 类可以在任何地方访问,不能实例化,只能继承
sealed or internal sealed 类只能在当前的工程中访问,只能实例化,不能继承
Public sealed 类可以在任何地方访问,只能实例化,不能继承