【问题标题】:Semantics driving the allowed abstract members in an interface vs an abstract class驱动接口中允许的抽象成员与抽象类的语义
【发布时间】:2017-06-18 23:02:39
【问题描述】:

我在 Joseph Albahari 的《C# in a nutshell》一书中读到了以下陈述:

接口只能包含方法、属性、事件和索引器,这些非巧合恰恰是可以抽象的类的成员。

让我思考的是为什么作者说它发生的如此非巧合,我认为并非如此。我认为在这两种情况下推动这种可能性的因素是相同的。

这是我的看法。据我所知,在 C# 中只有以下项可以声明为抽象:

  1. 一种方法
  2. 属性
  3. 索引器
  4. 一个事件

以上四样东西当然可以出现在抽象类和接口中。因此,这一事实是实体内部可以抽象的关键驱动因素,无论是类还是接口。

现在看来作者的想法是另一种方式,即容器(抽象类或接口)是它们可以包含的驱动因素,而最终可能出现的抽象成员类型并非巧合在他们的编译器设计完成后,这两个地方原来是相同的。

我想知道是否有人知道驱动接口与抽象类中允许的抽象成员的不同内部语义。我的看法是,只有上述四种类型的项目可以是抽象的,所以同样的事实应该推动它存在于可以是接口或抽象类的容器中的可能性。

【问题讨论】:

  • ...and it just happens non-coincidentally that in the end the kind of abstract members possible at these two places turns out to be the same after their compiler design was finalized. 我认为您将 non-concidentallycoccidentally 的含义混淆了 - 它们具有相反的含义。作者说,接口只能包含类中可以抽象的那些成员,这正是不是巧合......我认为这也是你所说的。

标签: c# types interface abstract-class


【解决方案1】:

您可以将接口视为仅包含抽象成员的抽象类(抽象类也可能包含非抽象成员)。

因此,抽象类中可以抽象的成员类型与接口的成员类型相同,反之亦然,这不是巧合而是必然的结果。

【讨论】:

    猜你喜欢
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2021-04-02
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多