若將類中的某個成員聲明為static,該成員稱為靜態成員。類中的成員要麼是靜態,要麼是非靜態。一般說來,靜態成員是屬於類所有的,非靜態成員則屬於類的實例--對象。
以下示例代碼演示了如何聲明靜態和非靜態成員。
程序清單10-5:
using System;
class Test
{
int x;
static int 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; //正確
}
}
類的非靜態成員屬於類的實例所有,每創建一個類的實例,都在內存中為非靜態成員開辟了一塊區域。而類的靜態成員屬於類所有,為這個類的所有實例所共享。無論這個類創建了多少個副本,一個靜態成員在內存中只占有一塊區域。