为什么多重继承不是接口的主要目的?
Why is multiple inheritance not the main purpose of interfaces?
我的老师一直说接口不存在,因此可以使用它们作为在 c# 中实现多重继承的一种方式。
这是为什么?那他们是干嘛的?还没有人能轻易地向我解释这个,我很困惑。
我读了一些描述接口的文章和书籍,似乎所有这些都建议使用接口作为实现多重继承的变通方法。
在静态类型语言中,或者在同时具有动态类型和静态类型的语言(例如 C#)中使用静态类型时,继承由两部分组成。接口和实现。接口是一个合同,表明它将实现一组特定的方法或属性。实现是实际执行它的代码。代码实现一个接口。
接口用于保证对象实现特定的契约。这可以是单个合同,也可以是多个合同。这不是多重继承,既继承接口又继承实现
是的,有些人试图用多个接口来模拟多重继承,但这不是它的目的,而且模拟效果很差。
Multiple interfaces表示一个对象支持多个契约。多重继承表示一个对象重复使用多个实现。同样,继承需要接口和实现。接口实现只是接口。
接口形成契约(它们说明对象可以做什么),但不提供实现。
何必呢?定义契约是额外的工作,为什么不直接创建一个 class?
例如,假设您想开发一个绘图应用程序。你可能会想出几个对象,如圆形、三角形、方形等。然后你开始添加方法并添加类似 Draw()
的内容。这是您可以添加到所有形状实现的界面的东西。在 C# 中,按照惯例,它将被命名为 IDrawable
.
但为什么不是 class?
假设您正在扩展应用程序并添加对形状分组的支持,以创建更复杂的图案。分组也可以抽取,所以也有Draw()
的方法。现在,如果你只想画 "thing",你不需要知道它是一个形状还是一个组,或者你还没有发明的其他东西。
但为什么不是 class?
因为可能会有更多功能,例如 Move()
、Serialize()
等,并且 C# 不允许您继承多个 classes。
为什么不呢?
这不是技术限制,而是C#语言设计者的选择。一些语言,如 C++ 允许它,但它带来的技术问题很少,最著名的是 diamond problem. It also makes the compiler more complicated and it's been decided it is not worth it。它还
我的老师一直说接口不存在,因此可以使用它们作为在 c# 中实现多重继承的一种方式。
这是为什么?那他们是干嘛的?还没有人能轻易地向我解释这个,我很困惑。
我读了一些描述接口的文章和书籍,似乎所有这些都建议使用接口作为实现多重继承的变通方法。
在静态类型语言中,或者在同时具有动态类型和静态类型的语言(例如 C#)中使用静态类型时,继承由两部分组成。接口和实现。接口是一个合同,表明它将实现一组特定的方法或属性。实现是实际执行它的代码。代码实现一个接口。
接口用于保证对象实现特定的契约。这可以是单个合同,也可以是多个合同。这不是多重继承,既继承接口又继承实现
是的,有些人试图用多个接口来模拟多重继承,但这不是它的目的,而且模拟效果很差。
Multiple interfaces表示一个对象支持多个契约。多重继承表示一个对象重复使用多个实现。同样,继承需要接口和实现。接口实现只是接口。
接口形成契约(它们说明对象可以做什么),但不提供实现。
何必呢?定义契约是额外的工作,为什么不直接创建一个 class?
例如,假设您想开发一个绘图应用程序。你可能会想出几个对象,如圆形、三角形、方形等。然后你开始添加方法并添加类似 Draw()
的内容。这是您可以添加到所有形状实现的界面的东西。在 C# 中,按照惯例,它将被命名为 IDrawable
.
但为什么不是 class?
假设您正在扩展应用程序并添加对形状分组的支持,以创建更复杂的图案。分组也可以抽取,所以也有Draw()
的方法。现在,如果你只想画 "thing",你不需要知道它是一个形状还是一个组,或者你还没有发明的其他东西。
但为什么不是 class?
因为可能会有更多功能,例如 Move()
、Serialize()
等,并且 C# 不允许您继承多个 classes。
为什么不呢?
这不是技术限制,而是C#语言设计者的选择。一些语言,如 C++ 允许它,但它带来的技术问题很少,最著名的是 diamond problem. It also makes the compiler more complicated and it's been decided it is not worth it。它还