C#的静态方法与静态成员(转)
using System;
class Test
{
int x;
static y;
void F(){
x=1; //正确, 等价于this.x=1
y=1; //正确, 等价于Test.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; //正确
}
}
类的非静态成员属于类的实例所有, 每创建一个类的实例, 都在内存中为非静态成员开辟了一个区域; 而类的静态成员为类所有, 为这个类的所有实例所共享. 无论这个类创建了多少个副本, 一个静态成员在内存中只占一个区域.
class Test
{
int x;
static y;
void F(){
x=1; //正确, 等价于this.x=1
y=1; //正确, 等价于Test.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; //正确
}
}
类的非静态成员属于类的实例所有, 每创建一个类的实例, 都在内存中为非静态成员开辟了一个区域; 而类的静态成员为类所有, 为这个类的所有实例所共享. 无论这个类创建了多少个副本, 一个静态成员在内存中只占一个区域.
类的静态方法是属于类的,是在定义类的时候就初始化好的方法了,调用的时候要通过类名.静态方法来调用。动态方法是在对象初始化的时候初始化的,只有通过实例话成功的对象才能调用,调用方法可以是 对象名.动态方法。