![](/img/trans.png)
[英]What does List<"CLASSNAME"> "objectname" = new List<"CLASSNAME">(); Mean?
[英]What does Method<ClassName> mean?
我現在已經看過幾次這種語法了,它開始讓我擔心,
例如:
iCalendar iCal = new iCalendar();
Event evt = iCal.Create<Event>();
這是一個通用方法,使用類型參數聲明Create,並檢查此鏈接以獲取更多信息:
它正在調用泛型方法 - 所以在你的情況下,方法可以像這樣聲明:
public T Create<T>()
您可以在尖括號中指定type參數,就像創建泛型類型的實例一樣:
List<Event> list = new List<Event>();
這有幫助嗎?
泛型方法和泛型類型之間的一個區別是編譯器可以嘗試推斷類型參數。 例如,如果您的Create
方法是:
public T Copy<T>(T original)
你可以打電話
Copy(someEvent);
並且編譯器會推斷你的意思是:
Copy<Event>(someEvent);
它是實現Factory Method模式的通用方法。
這就是你在C#中提到泛型方法的方式。
定義泛型方法時,您可以像這樣編寫代碼:
return-type MethodName<type-parameter-list>(parameter-list)
當您調用泛型方法時,編譯器通常會從指定的參數中推斷出type參數,如下例所示:
Array.ForEach(myArray, Console.WriteLine);
在這個例子中,如果“myArray”是一個字符串數組,它將調用Array.ForEach <string>,如果它是一個int數組,它將調用Array.ForEach <int>。
有時,編譯器不可能從參數中推斷出類型(就像你的例子一樣,根本沒有參數)。 在這些情況下,您必須手動指定它們。
此語法只是將泛型應用於方法。 它通常用於您想要控制方法的返回類型的場景。 在使用IoC框架的代碼中,您會發現很多這種語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.