如果我有:
public interface IValueStorage : IComparable<IValueStorage>
{
public int compareObject {get;}
public int CompareTo(IValueStorage other)
{
return compareObject.CompareTo(other.compareObject);
}
}为什么我需要在实现这个接口的任何类上重新定义IComparable的接口实现?我可以声明每个成员使用基本实现吗?
我通常只是将这个接口更改为一个抽象类,但是在这种情况下,这个接口的实现者都是(并且应该保持)结构。
发布于 2022-10-11 13:20:09
IService.CompareTo不覆盖IComparable<IService>.CompareTo;它创建一个您的结构必须实现的新方法。为了让接口方法覆盖另一个接口的方法,必须使用显式接口实现语法。
public interface IService : IComparable<IService>
{
public int compareObject { get; }
int IComparable<IService>.CompareTo(IService other)
{
return compareObject.CompareTo(other.compareObject);
}
}发布于 2022-10-11 13:20:38
在这种情况下,您实际上所做的是声明一个新的CompareTo方法,它与在IComparable<T>中声明的同名方法无关。换句话说,以下代码:
public interface IService : IComparable<IService>
{
public int CompareTo(IService other)
{
…
}
}不是int IComparable<IService>.CompareTo(IService)的默认实现,而是新int CompareTo(IService)方法的独立声明。
因此,在实现IService的类中,将有两个CompareTo实现,一个用于每个接口IService和IComparable<IService>。
正如Joe所指出的,您可以在派生接口中使用显式实现语法:
int IComparable<IService>.CompareTo(IService other)
{
…
}https://stackoverflow.com/questions/74028733
复制相似问题