簡體   English   中英

非泛型類的C#泛型方法歸結為什么?

[英]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#中,方法中的代碼只創建一次。 無論是使用intstring還是object type參數調用它,都會運行相同的代碼。

因為C#泛型在編譯時仍然是通用的,所以它們可以在編譯庫中公開而無需重新編譯。 在C ++中,您需要在使用代碼中包含原始模板,因此可以編譯新副本。

簡單地說, 每個泛型方法只能獲得一個編譯方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM