物件呼叫靜態方法 C 中靜態成員 靜態方法 靜態類

2021-10-18 02:00:11 字數 2304 閱讀 6161

平時在用c#做開發的朋友都知道,不論是靜態成員還是靜態方法還是靜態類都是用static關鍵字來修飾。

也就是說只要看到了static,那麼它後面的東西就是靜態!在c#中,靜態成員或者靜態方法是屬於類的,不是屬於物件。假如我們有乙個類myclass,需要例項化這個 類,就應該這麼做:

myclass myclass = new myclass();

在這裡,myclass是類,myclass是物件。如果這個類中有個靜態方法static sayhello(),我們呼叫的時候就應該寫成:

myclass.sayhello();

還記得我們寫的第乙個程式「hello world"嗎? 仔細一看就會發現,原來main()方法就乙個靜態方法。

main()方法在program類中,它是程式的入口點。那麼main()方法為什麼要是靜態的呢?因為作業系統在呼叫我們寫的程式執行時,首先要找到程式入口點main()方法,如果main()方法不是靜態的,那麼這個方法是屬於物件的,也就意味著在呼叫main()之前需要先例項化program類的乙個物件,再用物件來呼叫。那麼問題來了,程式入口都進不去,怎麼來例項化物件呢?程式無法執行了。所以需要把main()方法設定為靜態方法,這樣作業系統在呼叫這個方法時不需要例項化物件,直接通過類名program來呼叫main()方法即可。

其實上面我們用到的writeline() readkey()都是靜態方法,它們是屬於console類的,而且console就是乙個靜態類!

接下來做幾個測試:

或者我們將sayhello()方法改為靜態方法,在方法名前面加上static關鍵字。

我們發現又有錯誤了,

哦,原來是因為我在program類名前加了static 那麼program類就成為了乙個靜態類。靜態類是不可以被例項化的,而且靜態類中只能有靜態方法或者靜態成員。sayhello()是乙個例項成員,它是不可以在靜態類中宣告的,所以我們再修改一下,變成下面這樣:

現在編譯執行正常了。

接下來簡單介紹幾個微軟提供給我們的常用靜態類

console類

file類

environment類

console類、environment類就不說了,來看一下file類幾個常用的靜態方法:

public static string readalltext(string path)//讀取文字檔案的所有內容

public static streamreader opentext(string path)//開啟乙個文字檔案返回乙個流

public static streamwriter createtext(string path)//建立乙個檔案返回乙個寫入流

public static void copy(string sourcefilename, string destfilename)//拷貝檔案

public static void writealllines(string path, ienumerable contents, encoding encoding)

//寫入所有的行

public static void writealltext(string path, string contents)//寫入所有的內容

public static byte readallbytes(string path)//讀取所有的位元組

這些靜態方法在平時是經常用?用起來是不是很爽?直接用類名file呼叫靜態方法飛起!

C 靜態成員 靜態方法 靜態類

c 靜態方法與非靜態方法的區別不僅僅是概念上的,那麼他們有什麼具體的區別呢?讓我們通過本文向你做一下解析。c 的類中可以包含兩種方法 c 靜態方法與非靜態方法。那麼他們的定義有什麼不同呢?他們在使用上會有什麼不同呢?讓我們來看看最直觀的差別 使用了static 修飾符的方法為靜態方法,反之則是非靜態...

c 靜態方法和靜態成員

便於實現同一類的不同物件之間資料共享 靜態成員的提出是為了解決資料共享的問題。實現共享有許多方法,如 設定全域性性的變數或物件是一種方法。但是,全域性變數或物件是有侷限性的。這一章裡,我們主要講述類的靜態成員來實現資料的共享。靜態資料成員 在類中,靜態成員可以實現多個物件之間的資料共享,並且使用靜態...

C 中靜態成員與非靜態成員

靜態成員和非靜態成員 若將類中的某個成員宣告為 static 該成員稱為靜態成員,類中的成員要麼是靜態,要麼是非靜態的。一般說來靜態成員是屬於類所有的,非靜態成員則屬於類的例項。以下示例 演示了如何宣告靜態和非靜態成員。using system class test static void g st...