从果壳中的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> { ... }
“关闭类型参数时,”类型可以将自己命名为具体类型“是什么意思? 你能说明这些例子中的位置吗?
“具体类型”和“关闭类型参数”是什么意思?
在示例中,没有泛型类型的实例化,那么“类型参数”和“具体类型”在哪里?
感谢。
答案 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
是你的具体类型。