1. 程式人生 > >C#定義只能處理枚舉類型的泛型類型

C#定義只能處理枚舉類型的泛型類型

使用 結果 枚舉 name led 枚舉類 internal 不能 class

 1 internal sealed class GenericTypeThatRequireAnEnum<T>
 2 {
 3     public static int age = 12;   //該 static 字段在不同的封閉類型之間是獨立不共享的
 4 
 5     //靜態構造器針對每個封閉類型都會執行一次,泛型類型定義靜態構造器的目的就是為了保證傳遞的類型實參滿足特定的條件
 6     //靜態類型構造器只能是私有的,不能添加訪問權限修飾符,並且是由 CLR 自動調用的
 7     static GenericTypeThatRequireAnEnum()
 8     {
9 Console.WriteLine("T type is : {0}", typeof(T).Name); 10 if (!typeof(T).IsEnum) 11 { 12 throw new ArgumentException("T must be an enumerated type"); 13 } 14 }

使用方式:

1 enum eEnum1 { }
2 
3 enum eEnum2 { }
4 
5 GenericTypeThatRequireAnEnum<eEnum1> tmp1 = new
GenericTypeThatRequireAnEnum<eEnum1>(); 6 GenericTypeThatRequireAnEnum<eEnum1>.age = 153; 7 GenericTypeThatRequireAnEnum<eEnum2> tmp2 = new GenericTypeThatRequireAnEnum<eEnum2>(); 8 Console.WriteLine(GenericTypeThatRequireAnEnum<eEnum2>.age); 9 //GenericTypeThatRequireAnEnum<int> tmp3 = new GenericTypeThatRequireAnEnum<int>();
//這句會報異常,因為類型實參不是每句類型

運行結果:

技術分享圖片

C#定義只能處理枚舉類型的泛型類型