【问题标题】:Does a class inherit an interface or implement an interface?类是继承接口还是实现接口?
【发布时间】:2019-02-13 09:58:32
【问题描述】:

由于 C# 使用相同的语法进行继承和实现,即 ':'。我们说一个类实现了一个接口还是继承了一个接口?类可以从接口继承任何东西吗?

【问题讨论】:

  • 类实现接口。没有什么可以从接口继承。
  • 接口只是一个包含虚拟成员的容器,没有实现,所以这里没有什么可以继承
  • 不,你总是实现一个接口并从一个基类继承。 C#语法与它无关,这是基本的OOP。
  • 这是一个很好的问题,在 C# 8.0 实现了默认接口成员之后......他们说“[...]现有实现继承了默认实现。[...]”docs.microsoft.com/en-us/dotnet/csharp/whats-new/…

标签: c# inheritance interface


【解决方案1】:

一个接口没有什么可以继承*所以一个类会实现这个接口。

*这将在 C# 版本 8 中略有改变,我们将获得 default interface implementation,但为了理智起见,我想我们仍将使用“实现”而不是“继承”

【讨论】:

    【解决方案2】:

    类不能从接口继承,因为根据定义,接口是空的:它只规定了某些成员的强制实现。

    来自MSDN about interfaces:

    "一个接口包含一组定义 类或结构可以实现的相关功能。”

    例如:

    interface IWritable {
        void Write();
    }
    

    上面的代码确实只需要在所有实现它的类中都有一个Write() 方法。

    现在是棘手的部分。您可以将接口视为纯抽象类,即它只定义方法而没有实现。在其他编程语言中,例如 C++(顺便支持多重继承,因此没有“需要”任何区别),这些类是继承的。此外,您可以为这些方法甚至常量定义默认实现。事实上,这在 C# 中也是允许的。

    因此,当我们更多地考虑它的实现方式以及它将在未来提供的功能时,区分“实现”和“扩展”或“继承”的界限变得越来越模糊。

    不过,就设计而言,它绝对是一种实现。

    在MSDN: interfaces reference进一步阅读。

    【讨论】:

    • “某些方法”应更改为“某些成员 - 方法、属性、事件或索引器”。不过,+1 以获取详细说明。
    • 谢谢@Zohar Peled,已更改。
    【解决方案3】:

    类可以实现多个接口,一个类一次只能继承一个类。

    【讨论】:

    • 请注意,只有 C# 规范将语言限制为仅允许从单个类继承。多重继承存在于许多其他语言中。
    • 我完全同意你的看法。我的回答是基于他的问题,它指的是 c#
    【解决方案4】:

    类总是实现接口,从不从接口继承任何东西,但接口可以继承其他接口。

    看下面的例子,这里我分别定义了两个接口ISum和IMinus。

    接口的继承:ISum 在 IMinus 中继承。

    接口的实现: IMinus 在 FooClass 中实现。

    public interface ISum
    {
        int Sum(int a, int b);
    }
    
    public interface IMinus : ISum
    {
        int Minus(int a, int b);
    }
    
    public class FooClass: IMinus
    {
        public int Sum(int a, int b)
        {
            return a + b;
        }
    
        public int Minus(int a, int b)
        {
            return a - b;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-26
      • 2019-08-04
      • 1970-01-01
      • 2015-12-23
      • 2016-09-12
      • 2023-03-13
      • 1970-01-01
      • 2018-05-28
      相关资源
      最近更新 更多