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 表示從起始索引開始,逐個取值,...