0

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

4

4 回答 4

1

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

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

于 2019-02-13T10:04:26.800 回答
1

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

MSDN 关于接口

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

例如:

interface IWritable {
    void Write();
}

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

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

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

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

MSDN 中进一步阅读:接口参考

于 2019-02-13T10:06:11.687 回答
0

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

于 2019-02-13T10:10:49.747 回答
0

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

让我们看看下面的例子,这里我分别定义了两个接口ISumIMinus

接口的继承: 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;
    }
}
于 2019-02-13T10:15:51.007 回答