一个类如何从其自身的参数化版本继承?

Ms.*_*lib 4 .net c# oop

我看到了一个SomeClass被定义为的C#类

public class SomeClass : IComparable<SomeClass>, IEquatable<SomeClass>
{
   // ... 
}
Run Code Online (Sandbox Code Playgroud)

而我想知道如何将其翻译成英文.我理解它的方式似乎在逻辑上是不可能的.一个类如何从其自身的参数化版本继承?另外,这是一种常见的设计模式吗?

Str*_*ior 7

关键是要认识到它不是继承自(或实现)自身的参数化版本,而是继承(或实现)另一个类或接口,并将自身用作该目标类型的泛型参数.

例如,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#中并不常见,但确实会不时出现.