泛型和反射

2021-06-22 14:42:06 字數 2292 閱讀 6247

泛型允許程式設計師在**中將變數或引數的型別,先用[型別佔位符]來代替,等到允許的時候再根據傳入的[類]來代替

泛型是指帶型別引數的類,而不是引數本身。

類、方法、結構、介面都可定義為泛型

可以定義多個引數  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...