2019-12-17 C#總結(jié)

類實例化
在使用類的非靜態(tài)方法或?qū)傩詴r,必須將類實例化。把類比做蓋房的圖紙,如果要使用房子的功能,如住人,得有真實存在的房子實體才行,所以要想使用房子的功能,需要把圖紙轉(zhuǎn)化為房子實體,這個過程就稱為實例化過程。
在使用類的靜態(tài)方法或?qū)傩詴r,不用將類實例化。我想使用圖紙上房子的長寬高時,我不必先建一座房子才能知道或使用它的長寬高,我可以直接把值從圖紙上拿出來使用,只要是這個值,建的房子的長寬高都一樣,所以就不需要實例化了,此種情況長寬高就為靜態(tài)屬性/方法。

值類型與引用類型
一個類型要么是值類型,要么是引用類型。區(qū)別在于數(shù)據(jù)存儲的方式:對于值類型,數(shù)據(jù)存放在棧里。對于引用類型,引用存放在棧里而實際數(shù)據(jù)存放在堆里。

引用類型的變量存儲對其數(shù)據(jù)(對象)的引用,而值類型的變量直接包含其數(shù)據(jù)。 對于引用類型,兩個變量可引用同一對象;因此,對一個變量執(zhí)行的操作會影響另一個變量所引用的對象。 對于值類型,每個變量都具有其自己的數(shù)據(jù)副本,對一個變量執(zhí)行的操作不會影響另一個變量。

集合
集合包含三種:List IDictionary(KeyValue) IEnumable(枚舉、foreach遍歷)

??運算符
op1 ?? op2
op1 == null ? op2 : op1

?.運算符
使用?.運算符,會把int? count設置為null,而不是拋出一個異常。

System.Collections.Generic名稱空間
這個名稱空間包含用于處理集合的泛型類型,使用得非常頻繁,所以用using語句配置它,這樣使用時就不必添加限定符了。

default關(guān)鍵字
public MyGenericClass()
{
   innerT1Object = default(T1);
}
其結(jié)果是,如果innerT1Object是引用類型,就給它賦予null值;如果它是值類型,就給它賦予默認值。對于數(shù)字類型,這個默認值是0;而結(jié)構(gòu)根據(jù)其各個成員的類型,以相同的方式初始化為0或null。default關(guān)鍵字允許對必須使用的類型執(zhí)行更多操作,但為了更進一步,還需要限制所提供的類型。

封箱就是將值類型轉(zhuǎn)換為引用類型,拆箱就是將引用類型轉(zhuǎn)換為值類型。
例子:

//封箱
int num = 5;
object obj=i;
//拆箱
int numChai = (int)obj;

這里創(chuàng)建了一個int型的變量num,把5賦值給它,然后把它封箱在object類型的變量obj中。以這種方式封箱變量而創(chuàng)建的對象,包含值類型變量的一個副本的引用,而不包含源值類型變量的引用。要進行驗證,可以修改源結(jié)構(gòu)的內(nèi)容,把對象中包含的結(jié)構(gòu)拆箱到新變量中,檢查其內(nèi)容,即拆箱。
拆箱的值必須和它要轉(zhuǎn)換的目標的變量有相同的類型。

ref和out都對函數(shù)參數(shù)采用引用傳遞形式——不管是值類型參數(shù)還是引用類型參數(shù),并且定義函數(shù)和調(diào)用函數(shù)時都必須顯示聲明該參數(shù)為ref/out形式。兩者都可以使函數(shù)傳回多個結(jié)果。
兩者區(qū)別:
兩種參數(shù)類型的設計思想不同,ref的目的在于將值類型參數(shù)當作引用型參數(shù)傳遞到函數(shù),是函數(shù)的輸入?yún)?shù),并且在函數(shù)內(nèi)部的任何改變也都將影響函數(shù)外部該參數(shù)的值;而out的目的在于獲取函數(shù)的返回值,是輸出參數(shù),由函數(shù)內(nèi)部計算得到的值再回傳到函數(shù)外部,因此必須在函數(shù)內(nèi)部對該參數(shù)賦值,這將沖掉函數(shù)外部的任何賦值,使得函數(shù)外部賦值毫無意義。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容