2010-12-13 60 views
1
public static T Get<T>() where T : class 
{ 
    string implName = Program.Settings[typeof(T).Name].ToString(); 
    object concrete = Activator.CreateInstance(Type.GetType(implName)); 

    return (T)concrete; 
} 

請解釋什麼是Get()where T是什麼意思?c#語法的幫助 - >獲取<T>()其中T意思是

歡迎使用一些閱讀網址。

+2

只是說明這段代碼對我來說看起來很脆弱。如果使用在設置中沒有鍵的類型調用它,它將引發異常。 – 2010-12-13 03:09:48

回答

2

這是一個通用的例子。 'T'代表一種類型。

例如:

string result = Get<string>(); 

請在泛型谷歌搜索。這會讓你開始:http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

+1

噢,保存一個編碼器ctrl + c/v。使它成爲一個直接的聯繫。 ;-) – 2010-12-13 02:46:36

+2

第一個示例將拋出編譯器錯誤,因爲「int」不是引用類型。你應該在這裏提到'where'約束的重要性(或者刪除第一個例子) – RPM1984 2010-12-13 02:52:10

+0

@brad http://goo.gl/nLUyy :) – 2010-12-13 03:18:16

2

where T : classT允許哪些類型的限制。這將

  1. 給你一個編譯錯誤,如果你把一個錯誤的類型
  2. 給你訪問的訪問方法/屬性或實例化的T實例基於約束

所以對於你的方法這將產生一個錯誤,如果你這樣稱呼它Get<int>()因爲int不是一個類。

public static T Get<T>() where T : class 
{ 
    string implName = Program.Settings[typeof(T).Name].ToString(); 
    var implType = Type.GetType(implName); 

    return (T)Activator.CreateInstance(implType); 
} 
+0

這將不能編譯。沒有這樣的過載存在。 – SLaks 2010-12-13 02:59:59

+0

啊是的......我的不好,T和類型的論點是不明確的。 – 2010-12-13 03:10:42

1

這將在此特定情況下將T限制爲參考類型。