代码之家  ›  专栏  ›  技术社区  ›  Ryan Leach

当C#基于泛型重载类名时,它被称为什么?

  •  2
  • Ryan Leach  · 技术社区  · 6 年前

    E、 我今天第一次看到下面的代码。

    public abstract class SimpleFilter<T>
    {
        //blah
    }
    
    public abstract class SimpleFilter<TA, TB> : SimpleFilter<SimpleFilter<TA,TB>.Pair> {
    
        //blah
        public struct Pair
        {
         // blah
        }
    }
    

    所以这些类有相同的名称,但是泛型参数的数量/类型不同?

    2 回复  |  直到 6 年前
        1
  •  6
  •   René Vogt    6 年前

    在伊利诺伊州,他们的名字是 SimpleFilter`1 SimpleFilter`2 -不同的名称,名称末尾的数字只是名称的一部分(但恰好指示它们有多少类型参数)

    但是,在本例中,我们有两个类也有继承关系。这里没有什么特殊的泛型值得注意。

        2
  •  3
  •   Sweeper    6 年前

    具有不同签名但名称相同的方法称为重载。我们统称为“方法的重载”,因为大多数时候方法都做同样的事情。 String.Split(char[]) String.Split(char[], StringSplitOptions) 基本上是在做同样的事情-分裂一个字符串。

    但是,具有不同数量泛型类型参数的类型与此不同。它们代表完全不同的东西。 Tuple<T1, T2> Tuple<T1,T2,T3,T4,T5> 表示具有5个值的元组。这是完全不同的事情。我们没有这个特别的名字。我们就叫它 元组<T1,T2> . 它们之间并没有真正的联系,因为它们代表着非常不同的东西。

    就我个人而言,我从未尝试过集体引用所有同名的不同类。我想你可以称之为 Tuple “类”,或者在本例中,“the SimpleFilter

    这不是语言的特点。具有相同名称但不同类型参数的类只是不同的类。就编译器而言, 元组<T1,T2> Tuple<T1, T2, T3> 是不同的阶级,就像 String Stream