[英]What do C# generic methods on a non-generic class boil down to?
如果我有這樣的課: -
static class Foo {
public static void Bar<T>(T item) { Console.WriteLine(item.ToString(); }
}
我知道在這個例子中沒有必要使用T,因為所有的類型都有ToString()等等 - 這只是一個人為的例子。 我更感興趣的是在發動機罩下發生的事情如下: -
Foo.Bar("Hello");
Foo.Bar(123);
Foo.Bar(new Employee("Isaac"));
我廣泛地(想想!)我理解具體化,即如果你制作不同類型的泛型類,例如
List<Int32>
List<String>
List<Employee>
然后在編譯時(或運行時?)我們最終會得到三個實際的具體類型,每個類型對應一個指定的泛型參數。 在我的第一個例子中是否同樣適用於方法調用,即我們是否仍然有一個類Foo但是有三個Reified Bar方法,一個用於String,Int32和Employee?
這就是C ++模板和C#泛型之間的區別。
在C ++中,模板會為其使用的每種類型生成一個新方法。 但是,在C#中,方法中的代碼只創建一次。 無論是使用int
, string
還是object
type參數調用它,都會運行相同的代碼。
因為C#泛型在編譯時仍然是通用的,所以它們可以在編譯庫中公開而無需重新編譯。 在C ++中,您需要在使用代碼中包含原始模板,因此可以編譯新副本。
簡單地說, 每個泛型方法只能獲得一個編譯方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.