【问题标题】:Is Generic Types in C # like in Java? [duplicate]C# 中的泛型类型与 Java 中的一样吗? [复制]
【发布时间】:2014-03-21 19:31:52
【问题描述】:

我研究 Java 很长时间,并且非常熟悉该语言中泛型类型的操作:我知道只有在编译时才会有类型擦除,所以在运行时这些信息不会可用 ) 并了解在泛型类型上应用多态性时遇到的困难。

现在我正在学习 C#,我注意到虽然这种语言使用类似的符号 (Type) 语义似乎并不相同。例如,看到这个问题,C# 运行时是否存储泛型类型的信息而不是丢弃它,与 Java 不同,这是正确的吗?此外,我从未见过 C# 中使用“jokers”(通配符)和类型 。在那种语言中这是可能的(甚至是必要的)?

最后,C# 支持单个方法(不仅仅是类)泛型吗?如果是,Java 中这种构造的等效语法是什么:

public <T> void method (T parameter1 , parameter2 <T> List ) {

如果有任何值得强调的其他细节,或者可能是一些参考资料来了解更多信息,也将受到欢迎。

【问题讨论】:

  • 虽然这个问题很相似,但它并没有解决这里的一些具体问题。我不知道它是完全重复的......

标签: c# java


【解决方案1】:

例如,看到这个问题,C# 运行时是否存储泛型类型的信息而不是丢弃它,与 Java 不同,这是正确的吗?

是的,这是正确的。 C# 不受这种方式类型擦除的限制。

另外,我在 C# 中从未见过使用“jokers”(通配符)和类型 。在那种语言中这是可能的(甚至是必要的)?

是的,这是通过generic constraints 完成的,例如:

public class SomeType<T> where T : IEquatable<T> 
{

这将创建一个类,其中 T 类型必须实现 IEquatable&lt;T&gt;

最后,C# 支持单个方法(不仅仅是类)泛型吗?如果是,Java 中这种构造的等效语法是什么:

public void Method<T>(T parameter1, List<T> parameter2)
{

【讨论】:

  • 你会怎么做&lt;T extends T1 &amp; T2&gt;
  • @fge where T : IFirstInterface, ISecondInterface - 有关约束选项的详细信息,请参阅我发布的链接。
【解决方案2】:

是的,C# 不进行类型擦除,它以正确的方式进行泛型。 通配符是通过 where 子句实现的,您可以在其中以与泛型类型类似的方式指定约束。

http://msdn.microsoft.com/en-us/library/bb384067.aspx

是的,C# 包含方法泛型:

public void method<T>(T p1, T p2) 

是语法

【讨论】:

    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    相关资源
    最近更新 更多