1.泛型集合:
List
2.為什麼不提倡使用ArrayList的原因?
2.1是因為 ArrayList內部存儲數據的是一個 object數組,如果在ArrayList中存儲值類型數據,會出現裝箱和拆箱,從而影響服務器性能。
2.2類型安全問題:因為ArrayList 中所有元素都以object存儲,那麼在取出元素使用時,也是作為 object 類型取出,需要做轉型;如果不轉型,則容易出現類型錯誤!
3.泛型:就是一個類型占位符
3.2泛型方法
3.2.1自定義泛型方法
在泛型方法中,形參、返回值、方法體內部,都可以使用泛型。
3.2.2IEnumerabl
a.方法Cast
b.方法ToList
c.方法 OfType
3.3帶泛型的類和帶泛型的方法的區別:
泛型占位符使用的范圍不一樣:
泛型方法的泛型占位符只能在方法作用域中使用(形參、返回值、方法體)
帶泛型的類:使用范圍就是整個類的作用域。
反射
1.程序集是什麼:就是源代碼編譯成 IL後的中間代碼文件。
2.當程序執行時,
2.1虛擬機會從硬盤中加載程序集的代碼內容,然後按照代碼的語法解析,獲取信息,並為每個類單獨創建一個Type類的對象,用來存儲類的信息(成員變量、構造函數、方法............)。
復習反射:
Assembly程序集對象,就相當於將程序集文件內容解析後存放在內存裡的位置。
說到底,就是一個程序信息的容器,不能直接作為應用程序運行。如果要把Assembly運行起來,需要使用應用程序域。
1.獲取 Type 對象的方式:
1.1 typeof 關鍵字: Type t1 = typeof(Person);
1.2GetType方法: Type t2 = p1.GetType();//Person p1=new Person();
注意:兩種方式獲取的 Type對象相等,就是同一個(t1==t2)。
2.特性 Attribute
自定義特性類:繼承於 Attribute類;
類名以Attribute結尾;
使用時,可以省略類後面的Attribute。
關於使用反射調用某個對象裡的成員字段和方法:
以前我們是通過對象.字段 和對象.方法的方式來運行;
而用反射可以字段.對象 和方法.對象的方式來運行;
Person p = new Person();
public void InvokePerson(Person pPara)
{
Type pType = typeof(Person);
FieldInfo fInfo = pType.GetField("age");
string strAge = fInfo.GetValue(pPara).ToString();
MethodInfo mInfo = pType.GetMethod("SayHi");
mInfo.Invoke(pPara,null);
}
泛型可空類型:
委托的本質:
就是一個類,繼承於 MulticastDelegate類(多播委托),繼承於 Delegate類(委托)。