类
深入理解“类”
类成员
类的成员除了字段和方法以外,还有很多。它们可以分为两类:
数据成员(保存数据)
字段、常量
函数成员(执行代码)
方法、属性、运算符、索引、事件、构造函数、析构函数
类成员修饰符的顺序
类成员的声明语句格式如下(无论字段还是方法):
[特性] [修饰符] 核心声明
- 特性:特性必须放在修饰符和声明前面,可以有多个,任意顺序。
- 修饰符:修饰符可以有多个,任意顺序。
方括号中这两部分是可选的。
例如下面代码:
1 2 3 4 5 | [Serializable]
public class MyClass
{
...
}
|
方括号中的[Serializable]就是特性,public是修饰符。 例如,public和private都是修饰符,因此他们的顺序可以随意互换。
public static int MaxVal;
static public int MaxVal;
这两句都可以,完全一样。 所以,字段和方法这两种类成员的声明格式可以总结如下: 字段声明格式:
[特性] [修饰符] 类型 字段名称;
方法声明格式:
[特性] [修饰符] 返回类型 方法名称 (参数列表) { 方法体 }
实例类成员和静态类成员
类成员可以关联到一个类的实例,也可以关联到类的整体。前者称为实例类成员,后者称为静态类成员。
所谓实例类成员,就是将类实例化后,这个成员就只属于这个实例化,也就是说这个类的实例拥有每一个实例类成员的副本。
静态字段
静态字段被该类的所有实例共享,所有实例都访问同一内存位置,如果该内存的值被改变了,那么对所有实例中的该静态字段来说也都改变了。静态字段用static修饰符声明:
1 2 3 4 5 | Class D { int Val1; //实例类成员 static int Val2; //静态类字段 } |
对于静态成员来说,由于没有对应实例的副本,所以如果从类的外部访问,必须使用类名(而不是实例名)和点运算符。继续上面的代码:
1 2 3 4 5 6 7 | D dealer = new D(); //创建一个D类的实例dealer //如果要访问实例类成员Val1,那么 dealer.Val1 = 10; //如果要访问静态字段Val2,那么 D.Val2 = 15; |
静态成员的生存期
实例类成员一但实例销毁也就不存在了,而静态成员则会一直存在。
静态函数成员
静态函数主要是指静态方法,是执行代码。与静态字段一样,不需要实例化就可以调用。需要注意的是
静态方法不能访问实例成员,只能访问其他静态成员
其它静态成员
数据成员中的常量不能声明为static。
函数类成员中索引器不能声明为static。