泛型允許程式設計師在**中將變數或引數的型別,先用[型別佔位符]來代替,等到允許的時候再根據傳入的[類]來代替
泛型是指帶型別引數的類,而不是引數本身。
類、方法、結構、介面都可定義為泛型
可以定義多個引數 public class person
例項化乙個引用引數型別的泛型,它的記憶體分配的大小是一樣的;例項化乙個值引數型別的泛型,它的記憶體分配的大小是不同的
語法:定義:public class list{}
呼叫:listlist=new list()
繼承繼承乙個泛型類的時候,必須為其傳遞泛型引數
約束public class listwhere t:new(){}
約束t的例項必須包含乙個無參的建構函式
public void test(){}
三種用法:當方法引數、當返回值、在方法中例項化
1、主要方法
//獲取當前程式集物件集合
//**************************反射獲取成員
//1、獲取當前正在執行的程式集( assembly)物件
assembly ass = this.gettype().assembly;
//2、獲取程式集中dog類的型別(type)物件
type tdog = ass.gettype("反射.dog");
//3、獲取dog類的name欄位物件
fieldinfo finfo = tdog.getfield("name");
//4、獲取dog類的方法
methodinfo minfo = tdog.getmethod("shoothi");
//**************************反射建立成員
//5、根據dog的type物件,例項化乙個dog物件
dog d1 = activator.createinstance(tdog) as dog;
//6、使用dog類的name欄位物件,為d2例項的name欄位賦值
finfo.setvalue(d1, "小白");
//7、使用dog類的shouthi方法物件,執行d2例項的shouthi方法
string strres = minfo.invoke(d1, null).tostring();
獲取類物件
assembly ass = this.gettype().assembly;
//通過類全名
type tdog = ass.gettype("反射.dog");
//獲取當前程式集所有的公共的類
type types = ass.getexportedtypes();
//通過程式集獲取所有的型別
type typeall = ass.gettypes();
//通過類 直接獲取物件
type t2 = typeof(dog);
//通過物件來獲取型別物件
type t3 = this.gettype();
dog d3 = new dog();
type t4 = d3.gettype();
2、呼叫第三方程式集類
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.threading.tasks;
using system.windows.forms;
using system.reflection;
namespace 記事本
private void form1_load(object sender, eventargs e)
//讀取程式集檔案,並生成外掛程式按鈕
public void makebtnbydll()}}
}void menuitem_click(object sender, eventargs e)
}}
第三方dll檔案放置於程式執行路徑的plugs內
作用:使程式可以動態獲取類中的屬性,注釋等
執行時給程式設計師看的
泛型反射技巧
1 如何獲得乙個封閉構造型別 closed constructed type 的type物件?假設有如下的型別 class testtype t class testtype t,u 如果要獲得封閉構造型別的type物件,那麼只需要用c 的typeof運算子,或者vb的gettype運算子作用於具體...
泛型與反射
泛型 泛型的作用 泛型是jdk1.5以後才有的,可以在編譯時期進行型別檢查,且可以避免頻繁型別轉化!泛型的使用 泛型的方法 public class genericdemo 測試方法 test public void testmethod throws exception 泛型的類 public c...
C 反射泛型
c 泛型反射和普通反射的區別,泛型反射和普通反射的區別就是泛型引數的處理上 先看乙個簡單的例子。class class1 要利用反射動態建立該型別例項,並呼叫 test 方法,我們可以使用如下方法 type type typeof class1 object o activator.createin...