若将类中的某个成员声明为 static ,该成员称为静态成员。类的成员要么是静态的,要么是非静态的。一般来说,静态成员是属于类所有的,非静态成员属于类的实例——对象。
下例演示了如何声明静态和非静态成员。
using System;
class Test
{
int x;
static int y;
void F()
{
x=1; //正确,等价于this.x=1
y=1; //正确,等价于this.y=1
}
static void G()
{
x=1; //错误,不能访问this.x
y=1; //正确,等阶于Test.y=1
}
// 静态方法可以访问类的任何静态成员,但是不能访问实例成员。
static void Main()
{
Test t = new Test();
t.x=1; //正确
t.y=1; //错误,不能在类的实例中访问静态成员
Test.x = 1; //错误,不能按类访问非静态成员
Test.y=1; //正确。
类的非静态成员属于类的实例所有,每创建一个类的实例,都在内存中为非静态成员开辟了一块区域。而类的静态成员属于类所有,为这个类的所有实例所共享。无论这个类创建了多少个副本,一个静态成员在内存中只占一块区域。
下例演示了如何声明静态和非静态成员。
using System;
class Test
{
int x;
static int y;
void F()
{
x=1; //正确,等价于this.x=1
y=1; //正确,等价于this.y=1
}
static void G()
{
x=1; //错误,不能访问this.x
y=1; //正确,等阶于Test.y=1
}
// 静态方法可以访问类的任何静态成员,但是不能访问实例成员。
static void Main()
{
Test t = new Test();
t.x=1; //正确
t.y=1; //错误,不能在类的实例中访问静态成员
Test.x = 1; //错误,不能按类访问非静态成员
Test.y=1; //正确。
类的非静态成员属于类的实例所有,每创建一个类的实例,都在内存中为非静态成员开辟了一块区域。而类的静态成员属于类所有,为这个类的所有实例所共享。无论这个类创建了多少个副本,一个静态成员在内存中只占一块区域。