类的成员可以是静态成员或是实例成员。通常来讲,一般把静态成员看作属于类而把实例成员看作属于对象(类的实例)。 当一个域、方法、属性、事件、操作符或构造函数声明包含静态修饰符,它就声明了一个静态成员。另外,一个常数或类型声明隐含地声明了一个静态成员。静态成员有下面的特征: • 当一个实例成员在形式E.M 的成员访问(§7.5.4)中被引用时,E必须表示一个类型。E表示一个实例是错误的。 • 一个静态域确定一个存储位置。不管类中有多少实例被创建,只会有一个静态域的备份。 • 一个静态功能成员(方法、属性、索引、操作符或构造函数)不会在一个指定的实例中操作,而在一个静态功能成员中使用this也是错误的。 当一个域、方法、属性、事件、索引、构造函数或析构函数不包括static操作符,它就声明了一个实例成员。一个实例成员有时被称为非静态成员。实例成员有下面的特点: • 当一个实例成员在形式E.M 的成员访问中(§7.5.4)被引用时,E必须表示一个实例。E表示一个类型是错误的。 • 一个类中的每个实例都包括类的实例域的分立备份。 • 一个实例功能成员(方法、属性、访问符、索引访问符、构造函数或析构函数)在类中的一个给定实例中操作,而这个实例就可以通过this来访问(§7.5.7)。 下面的例子演示了访问静态和实例成员的规则: class Test { int x; static int y; void F() { x = 1; // Ok, same as this.x = 1 y = 1; // Ok, same as Test.y = 1 } static void G() { x = 1; // Error, cannot access this.x y = 1; // Ok, same as Test.y = 1 } static void Main() { Test t = new Test(); t.x = 1; // Ok t.y = 1; // Error, cannot access static member through instance Test.x = 1; // Error, cannot access instance member through type Test.y = 1; // Ok } }
在静态函数里要用的啊
当一个域、方法、属性、事件、操作符或构造函数声明包含静态修饰符,它就声明了一个静态成员。另外,一个常数或类型声明隐含地声明了一个静态成员。静态成员有下面的特征:
• 当一个实例成员在形式E.M 的成员访问(§7.5.4)中被引用时,E必须表示一个类型。E表示一个实例是错误的。
• 一个静态域确定一个存储位置。不管类中有多少实例被创建,只会有一个静态域的备份。
• 一个静态功能成员(方法、属性、索引、操作符或构造函数)不会在一个指定的实例中操作,而在一个静态功能成员中使用this也是错误的。
当一个域、方法、属性、事件、索引、构造函数或析构函数不包括static操作符,它就声明了一个实例成员。一个实例成员有时被称为非静态成员。实例成员有下面的特点:
• 当一个实例成员在形式E.M 的成员访问中(§7.5.4)被引用时,E必须表示一个实例。E表示一个类型是错误的。
• 一个类中的每个实例都包括类的实例域的分立备份。
• 一个实例功能成员(方法、属性、访问符、索引访问符、构造函数或析构函数)在类中的一个给定实例中操作,而这个实例就可以通过this来访问(§7.5.7)。
下面的例子演示了访问静态和实例成员的规则:
class Test
{
int x;
static int y;
void F() {
x = 1; // Ok, same as this.x = 1
y = 1; // Ok, same as Test.y = 1
}
static void G() {
x = 1; // Error, cannot access this.x
y = 1; // Ok, same as Test.y = 1
}
static void Main() {
Test t = new Test();
t.x = 1; // Ok
t.y = 1; // Error, cannot access static member through instance
Test.x = 1; // Error, cannot access instance member through type
Test.y = 1; // Ok
}
}