【问题标题】:Interface implementation vs interface inheritance - definition接口实现与接口继承 - 定义
【发布时间】:2016-09-12 17:20:22
【问题描述】:

很多同事把这些词混为一谈——接口实现和接口继承。这些词之间有什么区别(在 C# 中)?

对我来说,根据 MSDN,正确的说法是“类实现接口”,因此不是“类从接口继承”。

【问题讨论】:

  • 实现非常简单:它实现了。接口可以继承,但不能实现。因此这不是一回事
  • 继承通常会让你更富有。接口继承让你更穷。你继承了实现接口的需要。

标签: c#


【解决方案1】:

Interface implementation

实现接口的类型(类)。示例:

public interface IOperator
{
    int Operation(int a, int b);
}

public class SumOperator : IOperator
{
    public int Operation(int a, int b)
    {
        return a + b;
    }
}

public class DivisionOperator : IOperator
{
    public int Operation(int a, int b)
    {
        return a / b;
    }
}

在这种情况下,SumOperatorDivisionOperatorIOperator 接口的实现。

Interface inheritance

接口的结构(继承接口)

public interface IOperator
{
    int Operation(int a, int b);
}

public interface IOppositeOperator : IOperator
{
    int OppositeOperation(int a, int b);
}

public class SumOppositeOperator : IOppositeOperator
{
    public int Operation(int a, int b)
    {
        return a + b;
    }

    public int OppositeOperation(int a, int b)
    {
        return a - b;
    }
}

在这种情况下,IOpositeOperator 继承 IOperator,因此实现 IOpositeOperator 的类也应该实现其结构中定义的元素(包括 IOperator ,假设它继承)。它的具体类型是SumOpositeOperator 示例类。

【讨论】:

  • 由于接口不能实现接口,所以说 IOppositeOperator 实现了 IOperator 是不正确的。正确的定义是:IOppositeOperator 继承 IOperator
  • @user2457382 抱歉。我的英语技能是完美的。谢谢你的建议!
  • 我刚刚总结了你写的:)
【解决方案2】:

你说得对,我们一般认为类是实现接口,而不是继承接口;但是,这是一个相对较小的错误,每个人都明白“我的类继承某某接口”是什么意思。

另外,在各种场景中说接口继承是完全正确的,例如:

  1. 当一个接口扩展一个或多个其他接口时,我们称该接口继承自这些接口。
  2. X类扩展Y类且Y实现接口I时,我们可以说X类通过Y继承接口I
  3. 当一个抽象类“实现”一个接口而不为该接口的任何方法提供任何实现时。 (这是完全正确的,因为它是一个抽象类。)在这种情况下,说它实现了接口是不正确的,因为它并没有真正实现。

【讨论】:

    【解决方案3】:

    接口继承和接口实现不是一回事。

    一个类实现一个接口,声明它实现了一个接口,然后包含实现该接口所需的成员。

    接口继承是指从一个或多个其他接口继承的接口。与类继承的一个显着区别是,一个类只能直接从另一个类继承,而一个接口可以从多个接口继承。

    在本例中,IInterfaceC 没有定义自己的任何方法,但它包含了IInterfaceAIInterfaceB 中定义的方法。

    public interface IInterfaceA
    {
        void MethodA();
    }
    
    public interface IInterfaceB
    {
        void MethodB();
    }
    
    public interface IInterfaceC : IInterfaceA, IInterfaceB
    {}
    

    (如果您的同事交替使用术语“接口实现”和“接口继承”,请更正它们。他们会很感激的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 2020-10-17
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多