1. 程式人生 > >c#靜態方法不可以直接呼叫例項方法

c#靜態方法不可以直接呼叫例項方法

靜態方法是一種特殊的成員方法,它不屬於類的某一個具體的例項。非靜態方法可以訪問類中的任何成員,而靜態只能訪問類中的靜態成員。

看這個例子:

class A
{
int x;
static int y;
static int F(){
x=1; //錯誤,不允許訪問
y=2; //正確,允許訪問
}

在這個類定義中,靜態方法F()可以訪問類中靜態成員y,但不能訪問非靜態成員x。這是因為,x作為非靜態成員,在類的每個例項中都佔有一個儲存(或者說具有一個副本),而靜態方法是類所共享的,它無法判斷出當前的x是屬於哪個類的例項,所以不知道應該到記憶體的哪個地址去讀取當前x的值。而y是靜態成員,所有類的例項都公用一個副本,靜態方法F使用它就不存在什麼問題。