《深入理解C 》 高階泛型(第三章)

2021-09-25 22:48:16 字數 2920 閱讀 3351

1、靜態字段

從屬於宣告它的型別,每個封閉型別都有它自己的靜態欄位集

//定義包含靜態欄位的泛型型別

public class typewithfield

}//呼叫

typewithfield.field = "first";

typewithfield.field = "second";

typewithfield.field = "third";

typewithfield.printfield();

typewithfield.printfield();

typewithfield.printfield();

typewithfield.printfield();

輸出

從例項中可以看出,int型別對應的typewithfield型別的值一直是"first : int32",雖然中間有設定過string型別和datetime型別,

所以每種引數型別對應的typewithfield例項都有自己的靜態字段值,多個例項的靜態欄位是相互隔離的

2、靜態建構函式

//定義包含靜態建構函式的泛型型別

public class outer>.inner", typeof(t).name, typeof(u).name, typeof(v).name);

} public static void dummymethod() }}

//呼叫

outer.inner.dummymethod();

outer.inner.dummymethod();

outer.inner.dummymethod();

outer.inner.dummymethod();

outer.inner.dummymethod();

outer.inner.dummymethod();

輸出:

可以從輸出結果可以看出,只輸出了五行結果,第6行不會輸出,是因為呼叫的第二行和第六航是一樣的。和非泛型型別一樣,任何封閉型別的靜態建構函式只執行一次。

3、getgenerictypedefinition和makegenerictype使用

string listtypename = "system.collections.generic.list`1";

type defbyname = type.gettype(listtypename);

type closedbyname = type.gettype(listtypename + "[system.string]");

//makegenerictype將泛型的型別設定為string

type closedbymethod = defbyname.makegenerictype(typeof(string));

type closedbytypeof = typeof(list);

console.writeline(closedbymethod == closedbyname);

console.writeline(closedbyname == closedbytypeof);

type defbytypeof = typeof(list<>);

//getgenerictypedefinition獲取的是泛型型別的定義,不管list中的t是string還是int都返回list

type defbymethod = closedbyname.getgenerictypedefinition();

console.writeline(defbymethod == defbyname);

console.writeline(defbyname == defbytypeof);

輸出:

4、通過反射獲取和呼叫泛型方法

靜態型別

//定義包含泛型方法的靜態型別

static class ticket

}//靜態型別呼叫例項

type type = typeof(ticket);

methodinfo definition = type.getmethod("buy");

methodinfo constructed = definition.makegenericmethod(typeof(string));

constructed.invoke(null, null);

非靜態型別

//定義包含泛型方法的非靜態型別

class lesson

}//非靜態型別呼叫例項

type type2 = typeof(lesson);

methodinfo definition2 = type2.getmethod("learn");

//需要傳入乙個例項

object obj2 = activator.createinstance(type2);

methodinfo constructed2 = definition2.makegenericmethod(typeof(string));

constructed2.invoke(obj2, null);

深入理解c語言指標 第三章

背景 要理解函式及其和指標的結合使用,需要理解程式棧。大部分現代的塊結構語言,比如c,都用到了程式棧來支援函式執行。呼叫函式時,會建立函式的棧幀並將其推到程式棧上。函式返回時,其棧幀從程式棧上彈出。注意 區域性變數也稱為自動變數,它們總是分配在棧幀上。一些名詞 1.程式棧 2.棧幀 3.堆 4.棧 ...

深入理解計算機系統 第三章

1.假設過程p 呼叫者 呼叫過程q 被呼叫者 則q的引數放在p的棧幀中。2.另外,當p呼叫q時,p中的返回位址被壓入棧中,形成p的棧幀的末尾。3.返回位址就是當程式從q返回時應該繼續執行的地方。程式暫存器組是唯一能夠被所有過程共享的資源。雖然在給定時刻只能有乙個過程是活動的,但是我們必須保證當乙個過...

第三章 高階特性

當要取list,tuple和str的某個元素到某個元素,除了逐個列出以外,還可以用切片 slice 來完成.使用方法 名字 起始index 結束index l michael sarah tracy bob jack l 0 3 michael sarah tracy 表示從起始索引開始,逐個取值,...