繁体   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