【问题标题】:Describing relations between interfaces描述接口之间的关系
【发布时间】:2011-03-25 02:34:32
【问题描述】:

在 FCL 中考虑这个接口:

public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable

它告诉我们:接口IList&lt;T&gt; [XXX] 3 个接口:IConnection&lt;T&gt;IEnumerable&lt;T&gt;IEnumerable。我对 [XXX] 有一些选择:

(1) 派生自/继承

此选项来自 C# 语言规范(但不是直接),其中“多继承接口”一词出现了一些时间。我不喜欢它的原因:使用“继承”这个词,我们有:IEnumerable&lt;T&gt; 继承了IEnumerableICollection&lt;T&gt; 继承了IEnumerable&lt;T&gt;IEnumerable,然后IList&lt;T&gt; 继承了这三个。出了点问题,但我说不出来,感觉很糟糕。

(2) 实现

这也不是一个好的选择。因为没有实现,所以只是契约。

(3) 别的什么?我想知道

你的想法是什么?

【问题讨论】:

  • Em..投票结束...也许我应该在english.stackexchange.com上问这个问题?
  • +1 支持以防止关闭。 IMO 这是一个关于术语的有效编程问题。

标签: c# .net interface multiple-inheritance


【解决方案1】:

我为此使用了“扩展”。可能有点 Java 风格,但对我来说似乎很合适。可以合理地说具有超级接口的接口“扩展”该接口,因为它必须向它添加一些东西(不一定或当然,但没有很多理由不这样做。除了可能是语义原因,但是你仍然在语义上扩展)。

【讨论】:

    【解决方案2】:

    我会说IList&lt;T&gt; 包括 ICollection&lt;T&gt;IEnumerable&lt;T&gt;IEnumerable

    或者,我可以说它扩展

    【讨论】:

      【解决方案3】:

      我会说实现了一个接口,并且继承了一个类。你问的是这个吗?

      如果是,原因如下:

      • 接口描述了使用该合同的对象必须实现的合同。如果一个接口基于另一个接口,我会说它“扩展”或“派生自”该接口。如果它是一个类,那么它实现了接口。
      • 一个类将其他对象的功能公开给继承和扩展。

      我不使用“继承”来描述这两种情况的原因是因为你没有从接口继承任何东西,例如接口没有功能实体 - 只是具体对象将做什么的蓝图。

      【讨论】:

      • 所以你选择选项(2)?即IList&lt;T&gt;实现IEnumerable?但是实现在哪里?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 2017-08-20
      • 2016-03-24
      相关资源
      最近更新 更多