標籤:blog http io os 使用 ar strong 資料 2014
類和結構
類和結構實際上都是建立對象的模板,每個對象都包含資料,並提供了處理和訪問資料的方法,。
結構與類的區別是它們在記憶體中的儲存方式,訪問方式(類是儲存在堆(heap)上的參考型別),而結構是儲存在棧(stack)上的實值型別)和他們的一些特徵(如結構不支援繼承)。結構與類非常相似,主要的區別是使用關鍵字struct代替class來聲明結構。
對於類和結構,都使用關鍵字new來聲明執行個體:這個關鍵字建立對象並對其進行初始化。
類和結構的欄位值都預設0:
類中的資料和函數稱為類的成員。
資料成員:資料成員是包含類的資料——欄位,常量和事件的成員。資料成員可以是待用資料。
欄位是與類相關的變數。
常量與類的關聯方式同變數與類的關聯方式。const關鍵字聲明常量,假如把它聲明為public,就可以在類的外部存取他:
函數成員
函數成員提供了操作類中資料的某些功能,包括方法,屬性,建構函式和終結器(finalizer),運算以及索引器。
方法
正式的c#術語分函數和方法。
方法的聲明
表示矩形的.NET基類System.Drawing.Rectangle.
如果方法有傳回值時,return語句就必須與傳回值一起使用。如果方法沒有傳回值時,就把傳回型別指定為void,因為不能省略傳回型別。
方法可以包含任意多條return語句
調用方法。
MathTest說明了類的定義和執行個體化,方法的定義和調用的文法,除了包含main()方法的類之外,還定義了Math Test.
從代碼中看出,MathTest類包含一個欄位和一個方法,該欄位包含一個數字,該方法計算該數位平方,類還包括兩個靜態方法,一個返回pi的值,另一個計算作為參數傳入的數位平方。
下面的例子parameterTest.cs說明了如果把數組或其他參考型別(如類)傳遞給方法,對應的方法就會使用該引用改變這個數組中的值,而新值會反射在原始數組對象上:
注意,i的值保持不變,而在ints中改變的值在原始數組中也改變了。
out參數
編譯器使用out關鍵字來初始化,在方法的輸入參數前面加上out首碼時,傳遞給該方法的變數可以不初始化,該變數通過引用傳遞,所以在被用的方法中返回時,對該方法對該變數進行的任何改變都會保留下來,在調用該方法是,還需要out關鍵字,與在定義該方法時一樣:
具名引數,具名引數允許按任意順序傳遞,方法如下:
假如方法有幾個參數,就可以在同一個調用中混合使用位置和具名引數。
選擇性參數,參數也可以是可選的,選擇性參數還必須是方法定義的最後一個參數:
要想此方法正常工作,必須在最後定義optionalNumber參數。
方法的重載。為了方法的重載,值需聲明同名單參數個數或參數類型不同的方法即可:
假如不能使用選擇性參數,就可以使用方法重載來達到此目的:
兩種方法不能僅在傳回型別上有區別。兩個方法不能僅根據參數是聲明為ref還是out來區分。
屬性
它是一個方法或一對方法,在客戶代碼看來,它(們)是一個欄位。
c#中定義屬性,可以使用下面的文法:
建構函式
聲明基本建構函式的文法就是聲明一個與類同名的方法,但該方法沒有傳回型別;
建構函式的重載迴圈與其他方法相同的規則。
帶參數的建構函式,編譯器不會自動提供預設的建構函式。
}
}
把建構函式定義為private或protectcd這樣不相關的類不能訪問他們:
在mynumber中編寫一個共有靜態屬性或方法已執行個體化該類。兩種有用的情況:類僅用作某些靜態成員或屬性的容器,因此永遠不會執行個體化它。希望類僅通過調用某個靜態成員函數來執行個體化。
靜態建構函式
編寫靜態建構函式的原因,類有一些靜態欄位或屬性,需要在第一次使用類之前,從外部源中初始化這些靜態欄位或屬性。注意,靜態建構函式沒有方法修飾符,靜態建構函式不帶任何參數,一個類也只能有一個靜態建構函式。
上面的例子說明靜態建構函式的用法。為了使用colour結構,需要引用system.drawing.dll程式集,且必須為system.drawing名稱空間加上一條using語句;
using system;
using system .Drawing;
用下面的代碼測試靜態建構函式:
運行代碼,得到以下結果:
匿名型別
var關鍵字,它用於表示隱式類型化的變數。var與new一起使用時,可以建立匿名型別,匿名型別只是一個繼承自object且沒有名稱的類。
假如需要一個對象包含某個人的姓氏,中間名和名字,則聲明如下:
結構
為結構定義函數與為類定義函數完全相同,以下代碼說明了結構的建構函式和屬性:
}
}
結構是實值型別,不是參考型別,。結構不支援繼承,對於結構建構函式的工作方式有一些區別,尤其是編譯器總是提供一個無參數的預設建構函式,它不允許許替換的。
結構的建構函式
預設建構函式把數值欄位都初始化為0,把參考型別欄位初始化為null,總是隱式的給出。提供欄位的初始化值也不能繞過預設建構函式,下面代碼產生編譯錯誤:
部分類
partial關鍵字的用法:把partial放在class,struct或interface關鍵字的前面,下例:
在嵌套的類型中,只要partial關鍵字位於class關鍵字的前面,就可以嵌套部分類。
把部分類編譯到類型中時,屬性,XML注釋,介面,泛型型別的參數屬性和成員會合并。
靜態類
如果類只包含靜態方法和屬性,該類就是靜態。
tostring()方法,他是快速擷取對象的字串表示的最便捷方式。
例子;
}
}
該例子說明了如果不在自己定義的類中重寫Tostring(),該類將繼承system.object的實現方式,它顯示的名稱,如果希望tostring()返回一個字串,其包含類中的對象的值資訊。該例還說明了如何使用屬性封裝欄位。
3.一步一步學c#(三):對象和類型