“类型可以在关闭类型参数时将其自身命名为具体类型”是什么意思?

时间:2017-09-23 12:28:52

标签: c# generics programming-languages computer-science

从果壳中的C#

  

关闭类型时,类型可以将自身命名为具体类型   参数

public interface IEquatable<T> { bool Equals (T obj); }
public class Balloon : IEquatable<Balloon>
{
  public string Color { get; set; }
  public int CC { get; set; }
  public bool Equals (Balloon b)
  {
    if (b == null) return false;
    return b.Color == Color && b.CC == CC;
  }
}
     

以下也是合法的:

class Foo<T> where T : IComparable<T> { ... }
class Bar<T> where T : Bar<T> { ... }

“关闭类型参数时,”类型可以将自己命名为具体类型“是什么意思? 你能说明这些例子中的位置吗?

“具体类型”和“关闭类型参数”是什么意思?

在示例中,没有泛型类型的实例化,那么“类型参数”和“具体类型”在哪里?

感谢。

1 个答案:

答案 0 :(得分:2)

班级Balloon是具体类型。您可以使用它来创建Balloon类型对象的实例,如下所示:

var balloon = new Balloon 
{ 
    CC = 1;
    Color = "Blue" 
};

另一方面,IEquatable<T>是一个通用接口。只要类型实现此接口,T就会被此类型替换。

因此,如果您希望名为Balloon的自定义类型实现此接口,则必须首先声明此类实现它,如下所示:

public class Balloon : IEquatable<Balloon>

并且在类的主体内部,您必须实现方法Equals

现在请注意,由于此方法的签名如下:

bool Equals (T obj); 

你必须改为:

bool Equals(Balloon obj)

因为现在Balloon是你的具体类型。