學習c#靜態函式及變數的乙個精典例子與**
(1)用於對靜態字段、唯讀欄位等的初始化。
(2)新增static關鍵字,不能新增訪問修飾符,因為靜態建構函式都是私有的。
(3)類的靜態建構函式在給定應用程式域中至多執行一次:只有建立類的例項或者引用類的任何靜態成員才激發靜態建構函式
(4)靜態建構函式是不可繼承的,而且不能被直接呼叫。
(5)如果類中包含用來開始執行的 main 方法,則該類的靜態建構函式將在呼叫 main 方法之前執行。任何帶有初始值設定項的靜態字段,則在執行該類的靜態建構函式時,先要按照文字順序執行那些初始值設定項。
(6)如果沒有編寫靜態建構函式,而這時類中包含帶有初始值設定的靜態字段,那麼編譯器會自動生成預設的靜態建構函式。
以下用例子**進一步說明:
* 靜 態 構 造 函 數 練 習
* (1)①②③……為執行順序
* (2)輸出結果: static a()
* static b()
* x = 1, y = 2
using system;
class a } class b static void main()
//① 程式入口,
// 如果類中包含用來開始執行的 main 方法,
// 該類的靜態建構函式將在呼叫 main 方法之前執行。
// 轉到b的靜態建構函式----> , y = ", a.x, b.y);
//⑤ 輸出結果 console.readline(); } }
什麼是靜態方法
靜態方法的1個特別作用就是不用建立類的物件,而直接用類裡面的方法(public static 2個條件),
例如: class a }
可以這樣直接用: a.b(); 那麼在程式中如何可以利用靜態欄位和靜態構造方法,通常適用於於一些不會經常變化而又頻繁使用的資料,比如連線字串,配置資訊等,當滿足上面所說的兩點時,進行一次讀取,以後就可以方便的使用了,同時也節約了託管資源,因為對於靜態成員,乙個靜態欄位只標識乙個儲存位置。對乙個類無論建立了多少個例項,它的靜態字段永遠都只有乙個副本。 static: 類變數(物件共享)可以用類名,物件名點取,間接使用。 類方法
1)static方法中不能直接使用非靜態成員, 因為非靜態成員與例項相關,通過物件點取間接使用
2)static方法中不能用this(與例項相關)
3)非static方法中可以使用static成員
靜態方法有什麼弊端?
問:我翻看一些原始碼工程時看到幾乎沒有什麼靜態方法唯獨ms的sqlhelper中幾乎全是靜態方法 為什麼呢?
答1:在一些系統中使用非常頻繁的方法都使用靜態方法可以提高系統效能我是這麼認為的 :)
答2:本身不可公升級, 重寫 這要看乙個軟體產品的目的是什麼了.
答3:為了方便,不用例項化,但這樣程式編譯執行時就占用了系統資源
答4:靜態的屬性和方法在程式啟動的時候,就全部裝入記憶體的,而不管這些方法、屬性以後有沒有用到。即使是沒有人再訪問程式,這部分記憶體仍然不會釋放還有就是,所有訪問者看到的靜態屬性的資料幾乎都是一樣的,比如a使用者設定了username這個屬性,b使用者訪問的時候,得到的username仍然是a使用者設定的那個。這種特性,如果用在固定資料中,那不會有太大問題,比如連線字串之類的
答5:靜態方法/資料成員是屬於類的,不是屬於某乙個物件的,因而呼叫它不需要例項化;靜態方法和靜態資料成員相當於共享變數。為該類的所有物件所共有,因而在需要共享資料時,定義這種型別時很好的選擇。 一但定義乙個類後(不一定要例項化物件)該類的所有靜態成員就載入記憶體(並不是程式啟動,就裝入記憶體,沒有定義該類時它不會載入記憶體) 靜態成員的作用域與它所屬的類的作用域相同
C 靜態方法
靜態方法是一種特殊的成員方法,它不屬於類的某乙個具體的例項。非靜態方法可以訪問類中的任何成員,而靜態只能訪問類中的靜態成員。看這個例子 class a 在這個類定義中,靜態方法f 可以訪問類中靜態成員y,但不能訪問非靜態成員x。這是因為,x作為非靜態成員,在類的每個例項中都占有乙個儲存 或者說具有乙...
C 靜態方法
靜態方法是一種 特殊的成員方法,它不屬於類的某乙個具體的例項,而是屬於類本身。所以對靜態方法不需要 首先建立乙個類的例項,而是採用類名.靜態方法的格式 靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員不能訪問非靜態的成員.因為靜態成員 存在於記憶體,所以非靜態成員可以直接訪問類...
C 靜態方法
靜態方法與靜態變數一樣,屬於類本身,而不屬於那個類的乙個物件。要想呼叫乙個被定義為static的方法,必須在它前面加上這個類的名稱。其中static關鍵字即表示靜態的。宣告靜態方法的語法如下 訪問修飾符 static 返回型別 方法名 引數列表 靜態方法與例項方法唯一不同的,就是靜態方法在返回型別前...