c 物件導向中static 關鍵字

2022-02-18 14:53:03 字數 2429 閱讀 9933

c#物件導向中static 關鍵字

常用的的莫過於三大類:

靜態類:類可以宣告為 static 的,以指示它僅包含靜態成員

public

static

class

staticclass

例項分析a:

public

class

classa

public

static

intgetnum()

}

在主函式中呼叫classa的靜態方法

static

void main(string

args)

最終的輸出結果為:5

原因分析:

雖然有例項建構函式,但對classa類沒有進行例項化,所以該例項建構函式沒有被呼叫;

主函式**修改如下:

static

void main(string

args)

輸出結果為:15

如果類不宣告為靜態類(static class),很容易出現類似於上面的錯誤。修改為靜態類

public

static

class

classa

public

static

intgetnum()

}

關於靜態建構函式的補充:

(1) 靜態建構函式不可繼承;

(2) 靜態建構函式可以用於靜態類,也可用於非靜態類;

(3) 靜態建構函式無訪問修飾符、無引數,只有乙個 static 標誌;

(4) 靜態建構函式不可被直接呼叫,當建立類例項或引用任何靜態成員之前,靜態建構函式被自動執行,並且只執行一次。

例項分析b:如果是乙個類中全部封裝的是被外部呼叫的額方法,那麼可以考慮將該類申明為static

public

class

sqlhelp

public

void

do2()

}public

static

class

sqlhelper

public

static

void

do2()

}class

program

}

靜態變數:

靜態方法:

我們來看兩道題!

第一題:

class

program

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,該變數就被定義成為乙個靜態全域性變...