c#物件導向中static 關鍵字
常用的的莫過於三大類:
靜態類:類可以宣告為 static 的,以指示它僅包含靜態成員
publicstatic
class
staticclass
例項分析a:
publicclass
classa
public
static
intgetnum()
}
在主函式中呼叫classa的靜態方法
staticvoid main(string
args)
最終的輸出結果為:5
原因分析:
雖然有例項建構函式,但對classa類沒有進行例項化,所以該例項建構函式沒有被呼叫;
主函式**修改如下:
staticvoid main(string
args)
輸出結果為:15
如果類不宣告為靜態類(static class),很容易出現類似於上面的錯誤。修改為靜態類
publicstatic
class
classa
public
static
intgetnum()
}
關於靜態建構函式的補充:
(1) 靜態建構函式不可繼承;
(2) 靜態建構函式可以用於靜態類,也可用於非靜態類;
(3) 靜態建構函式無訪問修飾符、無引數,只有乙個 static 標誌;
(4) 靜態建構函式不可被直接呼叫,當建立類例項或引用任何靜態成員之前,靜態建構函式被自動執行,並且只執行一次。
例項分析b:如果是乙個類中全部封裝的是被外部呼叫的額方法,那麼可以考慮將該類申明為static
publicclass
sqlhelp
public
void
do2()
}public
static
class
sqlhelper
public
static
void
do2()
}class
program
}
靜態變數:
靜態方法:
我們來看兩道題!
第一題:
classprogram
static
program()
static
void main(string
args)
}}
答案:i為2,首先,類被載入,所有的靜態成員被建立在靜態儲存區,i=0;接著呼叫了類的成員,這個時候靜態建構函式別呼叫 i=2。
i為1,例項化後,呼叫建構函式,i=1,因為靜態建構函式只執行一次,不能再被執行了。
第二題:
using
system;
namespace
teststatic
static
void main(string
args)
",i);
console.writeline("j=
", new
class1().j);
console.read();}}
}
console.writeline(string.format("i=",i)); 這裡i是static變數,而且類class1是第一次被引 用,要先為class1裡面所有的static變數分配記憶體。
指令在邏輯還是一條一條的按順序執行的,所以 先為static int i分配記憶體,並且在該記憶體中保持int的預設值0,接著再為static int num 變數分配記憶體,
值當然也為0。
然後執行第二步,
為變數賦值:先為static int i變數賦值,i=getnum(),
看getnum裡面的**,就是return num,這個時候num的值是0,
於是i就為0了。然後對變數num賦值,num=1;這行**執行後,
num就為1了。
所以最後的結果為:
i=0 j=1
物件導向程式設計 static關鍵字
物件導向程式設計 static關鍵字 static關鍵字總結 class static 2,靜態方法 a,和靜態變數相同,靜態方法同樣可以在不建立物件下,通過類名直接呼叫.b,在靜態方法裡只能直接呼叫同類中其它的靜態成員 包括變數和方法 而不能直接訪問類中的非靜態成員。這是因為,對於非靜態的方法和變...
c中static關鍵字
看別人的c 會看到很多變數或者函式前面帶有static關鍵字。c中的static和php中的static有很到的不同,在php中static表示靜態化變數,乙個類中的static成員只與類有關,而與類的例項無關。c中的static關鍵字主要用於隱藏 access control 1.隱藏 函式前的s...
C 中static關鍵字
c 的static有兩種用法 面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函式,不涉及類 後者主要說明static在類中的作用。一 面向過程設計中的static 1 靜態全域性變數 在全域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態全域性變...