1 定义类
C#用关键字class来定义类。默认情况下,类声明为内部(internal)的,即只有当前项目中的代码才能访问它。与之相对应的,还可以用public关键字来修饰,这样该类还可以由其他项目中的代码来访问。
以这种方式声明的类不能是私有或者受保护的,但是可以把这些修饰符用于修饰类成员。编译器不允许派生类的可访问性高于基类。也就是说,内部类可以继承于一个公共基类,但是公共类不能派生于内部类。
除此之外,还可以指定两个关键字abstract和sealed来修饰。abstract指定抽象类(不能实例化,只能继承,可以有抽象成员)。sealed用来指定密封类(不能继承)。abstract与sealed两个关键字是互斥的。
C#中类定义的语法可以写作:
1: [internal | public] [abstract | sealed] class <类名> : [<基类>,] [<接口1>,<接口2>…]
2: {
3: //类定义
4: }
小结:
关键字 | 性 质 | |
可访问性 | public | 可以由其他项目中的代码来访问 |
internal | 只有当前项目中的代码才能访问 | |
可继承性 | abstract | 不能实例化,只能继承,可以有抽象成员 |
sealed | 不能继承,子类中无法修改 |
需要注意的是C#与C++不同,所有继承都是公共继承,不支持私有继承!如果类定义时没有指定基类,默认吧System.Object作为基类。
2 定义类成员
2.1 成员定义
类成员中包括字段、属性和方法。访问级别包括public(成员可以由任何代码访问)、private(成员只能由类中代码访问,默认使用private)、internal(只能由项目内代码访问)、protected(只能由类或派生类的代码访问)。后两个关键字可以合并使用,所以也有protected internal成员。他们只能由定义的类和项目中的派生类的代码来访问。
也可以使用static关键字来声明字段、属性和方法,表明它们是静态成员,而不是对象实例的成员。
2.2 字段定义
修饰符:public、private、internal、protected、static、readonly。其中readonly修饰的字段只能在声明阶段或者构造函数阶段可以进行赋值。
2.3 定义方法
方法可以用下列关键字来修饰:
static——只能通过类名来访问。
virtual——方法可以重写。
abstract——方法必须在非抽象的派生类中重写。
override——重写一个基类方法时必须使用该关键字。如果使用了override,还可以配合使用sealed指定在派生类中该方法不能被重写。
例:public override sealed void DoSomething()。
extern——方法定义放在其他地方。
2.4 定义属性
可将属性标记为 public、private、protected、internal或protected internal。这些访问修饰符定义类的用户如何才能访问属性。属性还可以使用virtual、override和abstract关键字,就像方法一样。
C#的属性拥有两个类似于函数的块,称为访问器。同一属性的get和set访问器可能具有不同的访问修饰符。例如,get可能是public以允许来自类型外的只读访问;set 可能是 private 或 protected。访问器可以使用的访问修饰符取决于属性的可访问性,访问器的可访问性不能高于它所属的属性,也就是说,私有属性的访问器不能包含任何可访问修饰符,而公共属性可以对其访问器使用所有可访问修饰符。