靜態成員和例項成員哪個效能更優?

2022-02-09 06:02:53 字數 1446 閱讀 9395

**:c#程式語言詳解(第2版) 

類的成員或者是靜態成員(static member),或者是例項成員(instance member)。一般來講,可以理解為靜態成員屬於類,而例項成員屬於物件(類的例項)。

如果域、方法、屬性、事件、運算子和建構函式的宣告中包含static修飾符,則將宣告靜態成員。此外,常量或型別宣告將隱式地宣告乙個靜態成員。靜態成員具有以下特徵:

— 當在形式為e.m的成員訪問(參見7.5.4小節)中引用靜態成員m時,e必須表示乙個包含m的型別。如果e表示乙個例項,則將發生編譯時錯誤。

— 乙個靜態域只標識乙個儲存位置。無論對乙個類建立了多少個例項,它的靜態域都將只有乙個副本。

— 靜態函式成員(方法、屬性、事件、運算子或建構函式)不會對具體的例項進行操作,在這類函式成員中引用this將發生編譯時錯誤。

如果域、方法、屬性、事件、索引器、建構函式或析構函式的宣告中不包含static修飾符,則將宣告例項成員(例項成員有時稱為非靜態成員)。例項成員具有以下特徵:

— 當在形式為e.m的成員訪問(參見7.5.4小節)中引用例項成員m時,e必須表示乙個包含m的型別的例項。如果e表示乙個型別,則將發生編譯時錯誤。

— 類的每個例項都分別包含一組該類的所有例項域。

— 乙個例項函式成員(方法、屬性、索引器、例項建構函式或析構函式)作用於該類的給定例項,可以使用this訪問該例項(參見7.5.7小節)。

下面的示例說明了訪問靜態成員和例項成員的規則:

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;  //正確

f方法顯示了在例項函式成員中,簡單名稱(參見7.5.2小節)既可用於訪問例項成員,也可用於訪問靜態成員。g方法顯示了在靜態函式成員中,通過簡單名稱訪問例項成員將引發編譯時錯誤。main方法顯示了在成員訪問(參見7.5.4小節)中,例項成員必須通過例項進行訪問,而靜態成員則必須通過型別進行訪問。

自己也寫過一點**,今天重新複習,才明白,這兩者的區別,可是還沒有搞清楚,兩都效能有什麼區別?

按自己想法,靜態成員應該用在經常使用的**中,如sqlhelper**中,靜態成員使用很多.例項函式實用於增加、刪除等不常用**。

請路過的高手指點下。

靜態成員與例項成員

靜態成員與例項成員 成員 屬性和方法。例項 由建構函式建立出來的物件。靜態成員 和建構函式相關的屬性和方法。例項成員 由建構函式建立出來的物件的屬性和方法。靜態成員與建構函式有關,例項成員與例項有關。靜態成員和例項成員一般情況下是不能直接相互訪問的,即 例項 物件 是無法直接訪問靜態成員的 反之也是...

靜態成員與例項成員

1 從語義上講,靜態成員對類有意義,類和所有例項共享。例項成員對例項有意義,每個例項都有專屬於自己的。如何理解?舉例來說,person類的age應該是例項成員,每個person例項都有自己的age,而maxage 年齡的最大極限,比如說200歲 應該是靜態成員,因為maxage對於人類 包括所有人 ...

靜態成員與例項成員

1 類的成員分為靜態成員和例項成員。為什麼設計出靜態成員和例項成員?靜態成員對類以及類的所有例項有意義,例項成員對每個例項有意義。考慮,person類,有個age欄位和maxage欄位。每個person例項都有自己的age,但所有的person例項都有相同的maxage 最大年齡極限 因此,maxa...