public void DisplayValue<T>(T field, string fieldname)
T在上面的代碼中代表什麼?T在C#中代表什麼?
這樣做的好處是什麼?
我們可以在哪裏使用?
public void DisplayValue<T>(T field, string fieldname)
T在上面的代碼中代表什麼?T在C#中代表什麼?
這樣做的好處是什麼?
我們可以在哪裏使用?
它是一個通用類型參數。
泛型類型參數允許您在編譯時爲方法指定任意類型T,而無需在方法或類聲明中指定具體類型。
例如:
public T[] Reverse<T>(T[] array)
{
var result = new T[array.Length];
j=0;
for(int i=array.Length; i>= 0; i--)
{
result[j] = array[i];
j++;
}
return result;
}
逆轉數組中的元素。這裏的關鍵是數組元素可以是任何類型,並且該函數仍然可以工作。您在方法調用中指定類型;型式安全仍然有保證。
因此,要扭轉一個字符串數組:
string[] array = new string[] { "1", "2", "3", "4", "5" };
var result = reverse(array);Will produce a string array in result of { "5", "4", "3", "2", "1" }
這有同樣的效果,如果你曾經被稱爲一個普通的(非通用)方法,看起來像這樣:
public string[] Reverse(string[] array)
{
var result = new string[array.Length];
j=0;
for(int i=array.Length; i >= 0; i--)
{
result[j] = array[i];
j++;
}
return result;
}編譯器看到數組包含字符串,所以它返回一個字符串數組。類型字符串被替換爲T型參數。
泛型類型參數也可用於創建泛型類。
在你給SampleCollection的例子中,T是任意類型的佔位符;這意味着SampleCollection可以表示一個對象集合,它是您在創建集合時指定的對象類型。
所以:
var collection = new SampleCollection<string>();
創建一個集合,可以容納字符串。上面所示的Reverse方法,以一種稍微不同的形式,可以用來反轉集合的成員。
將T包含在方法名中時,T的重要性如何?例如「Reverse
它表示它是一種通用方法.. –
從Generics (C# Programming Guide)
...通過使用泛型類型參數T,你可以寫一個類 其他客戶端代碼可以使用,而不會產生 運行時的成本或風險管型或裝箱操作
這麼多副本......必須儘快關閉。 – Sachin
它確實來自德爾福(Anders Hejlsberg)的父親,他也是開發C#語言團隊的首席架構師。在Delphi中,我們使用T來指定它是一種類型,例如TClient等。Anders在C#泛型中應用它是有道理的。我只希望你給泛型類型至少一些有意義的名稱,而不僅僅是T,而是例如TCommand。 – 2014-02-14 11:07:24