我看到了一个SomeClass被定义为的C#类
public class SomeClass : IComparable<SomeClass>, IEquatable<SomeClass>
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
而我想知道如何将其翻译成英文.我理解它的方式似乎在逻辑上是不可能的.一个类如何从其自身的参数化版本继承?另外,这是一种常见的设计模式吗?
关键是要认识到它不是继承自(或实现)自身的参数化版本,而是继承(或实现)另一个类或接口,并将自身用作该目标类型的泛型参数.
例如,IComparable<T>说会有一个CompareTo()方法将类型的对象T作为参数.因此,通过实现,IComparable<SomeClass>您只需保证此类上存在具有该签名的方法:
public class SomeClass : IComparable<SomeClass>
{
public int CompareTo(SomeClass other)
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
是的,这是相当普遍的做法.类通常实现泛型IComparable<>和IEquatable<>接口,以显示它们可以与相同类型的其他项进行比较.也许值得一提的是,Java中的枚举被声明为Enum<>自己的扩展- 这种模式在C#中并不常见,但确实会不时出现.