引言:類是c#的核心內容之一,當我們把所有的方面都分成一類又一類時,我們只需要在主程式中呼叫各個類的方法便可以輕易實現很多複雜的功能,物件導向程式設計是絕對離不開類的。類與結構有著差不多的結構和用法,本博文重點介紹類的使用,最後粗略介紹結構的特有用法。
(1)方法的宣告
[modifiers] return_type methodname([parameters])
//methdbody
modifiers是指方法的可訪問性,return_type是指返回值的型別,methodname是方法名,parameters時方法的引數,以及最後的方法體。尤其注意,如果方法有返回值,return語句就必須與返回值一起使用。如果方法沒有返回值,就可以把返回的型別指定為void。
(2)方法的呼叫
view code
1尤其注意靜態方法的呼叫,不需要例項化物件。using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;56
namespace
方法宣告與呼叫717
18public
static
int getsquareof(int x)//
靜態帶引數方法
1923
public
static
double getpi()//
靜態不帶引數方法
2428
public
double getsquareof(double x)//
非靜態帶引數方法
293334}
35class
program
3650
}51 }
(3)傳遞引數
view code
1using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;56
namespace
方法引數傳遞718
public
static
void somefuction(string
j)19
262728}
2930
3132
class
program33;
38string j = "
sharp";
39 console.writeline("
在沒有傳遞引數之前:");
40 console.writeline("
i="+i);
41 console.writeline("
ints[0]=
"+ints[0
]);42 console.writeline("
j=" +j);
43 console.writeline("
在傳遞引數之後:");
44parametertest.somefuction(ints,i);
45 console.writeline("
i=" +i);
46 console.writeline("
ints[0]=
" + ints[0
]);47
parametertest.somefuction(j);
48 console.writeline("
j=" +j);
49 }//
以上**說明,值型別傳遞之後,立即覆蓋方法本身的自己的值,而引用型則會繼續保持方法體自己的值,但是string這個引用型是個特例,其特點遵循值的引用。50}
值得注意的是,如果在方法的引數中新增ref關鍵字,可以迫使引數通過引用傳遞給方法,呼叫時也需要ref關鍵字,那麼該方法對變數所做的任何改變都會影響原始物件的值。將上述**的int i前加上ref關鍵字以及最後的呼叫也新增上ref關鍵字後,執行結果如下圖所示:
還有一種情況是out關鍵字的用法,它可以避免c#所堅持的輸入引數的初始化,在方法的輸入引數前加上out關鍵字可以避免傳遞給該方法的變數的初始化,out關鍵字也是以強制引用型的轉化。將以上**的ref關鍵字改為out關鍵字後,其輸出結果和上圖一樣。
c#支援方法過載,但是需要注意的是:1.兩個方法不能僅在返回型別上有區別;2.兩個方法不能僅僅根據引數宣告為ref還是out來區分。
宣告建構函式就是宣告乙個與包含的類的同名的沒有返回型別的方法。如果沒有編寫建構函式,那麼編譯器會建立乙個預設的建構函式,而這個建構函式僅僅用來把所有的成員字段初始化為標準的預設值,如果編寫了帶引數的建構函式,編譯器便會呼叫使用者自己編寫的建構函式而不會建立預設的建構函式,建構函式根據引數的不同,可以有不同的過載。
主要介紹:靜態建構函式
靜態建構函式只執行一次,主要用於初始化靜態欄位和屬性,靜態建構函式不帶任何引數並且只能訪問靜態成員。
view code
1using
system;
2using
system.drawing;
3using
system.collections.generic;
4using
system.linq;
5using
system.text;67
namespace
靜態建構函式822
常量不能修改,為此誕生了唯讀字段,唯讀字段使用關鍵字readonly宣告。可以在建構函式中給唯讀字段賦值。
結構使用關鍵字struct宣告,替代了class。大部分結構上結構與類相同,但是需要注意一下幾點:
結構是值型別
結構不支援繼承
結構的建構函式的工作方式有區別,編譯器總是提供乙個無引數的預設建構函式,並且不能被替換
使用結構可以指定字段如何在記憶體中布局
JVM 4 類檔案結構
class檔案是一組以8位位元組為基礎單位的二進位製流,各個資料專案嚴格按照順序緊湊地排列在class檔案中,中間沒有分隔符。class檔案格式 型別名稱 數量描述 u4magic1魔數 u2minor version 1次版本號 u2major version 1主版本號 u2constant p...
類與結構體
1.c與c 中結構體的不同 1 c中的結構體不能申明函式,只能申明變數 c 中的結構體和類差不多,能申明資料成員,也能申明函式成員 2 c中的結構體不能進行封裝,而c 中由於是 類 可以進行封裝。2.c 中類與結構體的區別 首先說明c 中類與結構體在一定意義上是等價的 區別 1 在預設狀態下,結構體...
類與結構體
類與結構體 程式的資料和功能被組織為邏輯上相關的資料項和函式的封裝集合,稱之為類 類是乙個能儲存資料和執行 的資料結構。它包含資料成員,函式成員,資料成員,儲存與類或類例項相關的資料,通常是表示該類所代表現實事物的特性。函式成員,執行 表示現實事物的功能和操作。方法和字段是最重要的類成員型別。欄位是...