首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提供默认接口实现的接口

提供默认接口实现的接口
EN

Stack Overflow用户
提问于 2022-10-11 13:11:25
回答 2查看 41关注 0票数 -2

如果我有:

代码语言:javascript
复制
public interface IValueStorage : IComparable<IValueStorage>
{
    public int compareObject {get;}
    public int CompareTo(IValueStorage other)
    {
        return compareObject.CompareTo(other.compareObject);
    }
}

为什么我需要在实现这个接口的任何类上重新定义IComparable的接口实现?我可以声明每个成员使用基本实现吗?

我通常只是将这个接口更改为一个抽象类,但是在这种情况下,这个接口的实现者都是(并且应该保持)结构。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-11 13:20:09

IService.CompareTo不覆盖IComparable<IService>.CompareTo;它创建一个您的结构必须实现的新方法。为了让接口方法覆盖另一个接口的方法,必须使用显式接口实现语法。

代码语言:javascript
复制
public interface IService : IComparable<IService>
{
    public int compareObject { get; }
    int IComparable<IService>.CompareTo(IService other)
    {
        return compareObject.CompareTo(other.compareObject);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2022-10-11 13:20:38

在这种情况下,您实际上所做的是声明一个新的CompareTo方法,它与在IComparable<T>中声明的同名方法无关。换句话说,以下代码:

代码语言:javascript
复制
public interface IService : IComparable<IService>
{
    public int CompareTo(IService other)
    {
        …
    }
}

不是int IComparable<IService>.CompareTo(IService)的默认实现,而是新int CompareTo(IService)方法的独立声明。

因此,在实现IService的类中,将有两个CompareTo实现,一个用于每个接口IServiceIComparable<IService>

正如Joe所指出的,您可以在派生接口中使用显式实现语法:

代码语言:javascript
复制
int IComparable<IService>.CompareTo(IService other)
{
    …
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74028733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档