標籤:style blog color 使用 io strong 檔案 for 資料
類和結構
類是儲存在堆(heap)上的參考型別,而結構是儲存在棧(stack)上的實值型別。
結構 不支援繼承
類
資料成員 是包含類的資料--欄位、常量和事件的成員。
函數成員提供了操作類中資料的某些功能,包括方法、屬性、建構函式和終結器(finalizer)、運算子以及索引器
ref參數 迫使值參數通過引用傳遞給方法
在方法的輸入參數前面加上out首碼時,傳遞給該方法的變數可以不初始化。
具名引數允許按照任意順序傳遞
參數也可以是可選的。必須為選擇性參數提供預設值。
方法重載:
.倆個方法不能僅在傳回型別上有區別
.倆個方法不能僅根據參數是聲明為ref還是out來區分
屬性
在屬性定義中省略set訪問器,就可以建立唯讀屬性
在屬性定義中省略get訪問器,就可以建立唯寫屬性
C#允許給屬性的set和get訪問器設定不同的存取修飾詞,屬性可以有公有的get訪問器和私人或受保護的set訪問器
如果屬性的set和get訪問器中沒有任何邏輯,就可以使用自動實作屬性。
建構函式
注意,如果提供了帶參數的建構函式,編譯器就不會自動提供預設的建構函式。
可以把建構函式定義為private 或protected,這樣不相關的類也不能訪問,
這在下面倆種情況下是有用的:
.類僅用作某些靜態成員或屬性的容器,因此永遠不會執行個體化它
.希望類僅通過調用某個靜態成員函數來執行個體化(這就是所謂對象執行個體化的類Factory 方法)
靜態建構函式,類有一些靜態欄位或屬性,需要在第一次使用之前,從外部源中初始化這些靜態欄位和屬性
C#建構函式初始化器可以包含對同一個類的另一個建構函式的調用,也可以包含對直接基類的建構函式的調用(使用相同的文法,應使用base關鍵字代替this)
唯讀欄位
readonly
可以在建構函式中給唯讀欄位賦值,但不能在其他地方賦值
public class Document{ public readonly DateTime CreationData public Document() { // Read in creation date from file.Assume result is 1 Jan 2002 // but in general this can be different for different instances // of the class CreationDate = new DateTime(2002,1,1); }}
匿名函數
var與new 關鍵字一起使用,可以建立匿名型別
如下:
var caption = new {FirstName = "James", MiddleName = "T",LastName = "Kirk"};
結構
正面影響:為結構分配記憶體時,速度非常快,因為它們將內聯或者儲存在棧中。在結構超出了範圍被刪除時,速度也很快。
負面影響:只要把結構作為參數來傳遞或者把一個結構賦予另一個結構,結構的所有內容就被複製,而對於類則只複製引用。
結構的繼承鏈:每個結構派生自System.ValueType類,System.ValueType類又派生自System.Object。
預設建構函式把數值欄位都初始化為0,把參考型別欄位初始化為null,且總是隱式地給出。
部分類
partial關鍵字允許把類、結構或介面放在多個檔案中
partial關鍵字的用法是:把partial放在class、struct或interface關鍵字前面
擴充方法,它允許改變一個類,但不需要該類的原始碼。
C#學習筆記 ----對象和類型