標籤:style color io 使用 ar strong for sp cti
- ref與out之間的區別:
ref 傳的參數必須要先初始化,out不必
ref傳進去的參數在函數內部可以直接使用,而out不可
out必須在離開函數前賦值
- 裝箱:
對實值型別在堆中分配一個對象執行個體,並將該值複製到新的對象中。按三步進行。
第一步:新分配託管堆記憶體(大小為實值型別執行個體大小加上一個方法表指標和一個SyncBlockIndex),SyncBlockIndex作用
是指示線程同步狀態
第二步:將實值型別的執行個體欄位拷貝到新分配的記憶體中。
第三步:返回託管堆中新指派至的地址。這個地址就是一個指向對象的引用了。
拆箱:
檢查對象執行個體,確保它是給定實值型別的一個裝箱值。將該值從執行個體複製到實值型別變數中。
- 擴充方法:被定義為靜態方法,它們的第一個參數指定該方法作用於哪個類型,並且該參數以this修飾符為首碼
- 靜態類以static聲明,指示它只包含靜態成員,不包含建構函式,不能被繼承可以有靜態建構函式,不能有參數,只運行一次,用於初始化靜態成員,但我們沒法直接調用,而是調用時由CLR自動調用
- readonly:運行時常量,且只能定義類成員變數,可以根據上下文邏輯進行賦值,只能賦值常量
const:編譯時間常量,編譯時間已確定
- c#結構體是實值型別,特性如下:
所有結構都從Object類派生,不能從其他類或者結構派生,也不能作為其他類或結構的基類。
結構中的欄位預設是私人的,並且結構的欄位不能在聲明時顯示初始化。
結構可以有一個或多個構造方法,但是不允許自己定義預設建構函式,而且編譯器要求自訂建構函式都要初始化結構的所有欄位。
結構的預設建構函式將所有實值型別的欄位設為0,所有參考型別的欄位設為空白引用
- try中有return語句,finally中的語句也會執行,在return後運行
- c# 聲明了abstract方法的類必須是abstract 方法,abstract方法必須沒有實現且必須被繼承類實現
- virtual 關鍵字用於修飾方法、屬性、索引器或事件聲明,並使它們可以在衍生類別中被重寫,virtual方法必須有實現,virtual 修飾符不能與 static、abstract, private 或 override 修飾符一起使用
- Action:無傳回值類型的泛型委派
Func:有傳回值類型的泛型委派,最後一個參數是傳回型別
Predicate:返回bool型的泛型委派
- params指定可變參數,方法聲明中只允許一個params關鍵字,之後不能再有參數
- 泛型中的靜態成員在相同封閉類間共用,在不同封閉類間不共用,例如下面a和b是相同封閉類型,與c不是
stack<int> a = new stack<int>(); stack<int>b= new stack<int>(); stack<long> c= new stack<long>();
當一般方法與泛型方法具有相同簽名時會覆蓋泛型方法,泛型參數可以有約束
| 約束 |
說明 |
| T:結構 |
型別參數必須是實值型別。 可以指定除 Nullable 以外的任何實值型別。 |
| T:類 |
型別參數必須是參考型別;這一點也適用於任何類、介面、委託或數群組類型。 |
| T:new() |
型別參數必須具有無參數的公用建構函式。 當與其他約束一起使用時,new() 約束必須最後指定。 |
| T:<基類名> |
型別參數必須是指定的基類或派生自指定的基類。 |
| T:<介面名稱> |
型別參數必須是指定的介面或實現指定的介面。 可以指定多個介面約束。 約束介面也可以是泛型的。 |
| T:U |
為 T 提供的型別參數必須是為 U 提供的參數或派生自為 U 提供的參數。 |
- 應用程式定義域:在一個進程中可以包含多個應用程式定義域,一個應用程式定義域可以裝載一個可執行程式(*. e xe )或者
多個程式集(*. d l l )。這樣可以使應用程式定義域之間實現深度隔離,即使進程中的某個應用程式定義域出現錯誤,也不會影響
其他應用程式定義域的正常運作。
- 類繼承了INotif yPropertyChanged,類中的屬性如果跟控制項綁定了, 那麼PropertyChanged事件 屬性就會被自動
賦值,屬性變了後可以出發PropertyChanged事件
c#基礎