**: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...