【问题标题】:Making interface from class [closed]从类制作接口[关闭]
【发布时间】:2016-11-04 16:36:23
【问题描述】:

我在为我的班级制作界面时遇到了一些麻烦。我尝试了一个简单的公共空白,并且成功了。但我无法让它与下面代码中的公共静态空隙一起工作。我认为这与枚举作为方法中的参数有关。但是我该如何解决这个问题?

这是课程:

这是我的界面:

【问题讨论】:

  • 请在您的问题中始终使用文字,而不是图片。
  • 接口实现方式不能是静态的。这是规矩。
  • 如果我不能使用接口,我该如何使用方法?
  • 你可以使用接口,只是不要让类的方法static
  • 嗯,这门课我是从学校学来的,所以我没有自己写。我只需要在我的代码中实现它。不确定我是否可以更改该代码

标签: c# enums interface


【解决方案1】:

接口是合约。它们为合约中的所有方法指定方法签名。

在您的界面中,您有:

void FFT(/*stuff*/)

然而,在你的实现中,你已经定义了

static void FFT(/*stuff*/)

现在,为什么我们不能使用静态?来自Joel Spoelsky

因为接口是消费者(调用者)和提供者(被调用者)之间的“契约”或协议。接口描述了被调用者将提供什么以及如何提供功能。不需要第三方提供的静态成员。静态成员不能被提供者覆盖,因此它们不属于接口。

【讨论】:

【解决方案2】:

接口是调用者和被调用者之间的契约。静态成员属于类而不属于对象,因此将方法设为静态没有意义。

【讨论】:

    【解决方案3】:

    为了解释为什么这真的没有意义,创建接口的原因是您可以将类的对象作为对接口类型的引用传递,因此消费者不需要知道哪个底层类型对象是。例如,您可以将IEnumerable<Foo> 传递给不需要知道或关心这是数组、列表还是哈希集等的方法,它只需要一个 Foo 序列。

    静态方法不与实例关联,因此没有可引用的对象。 C# 中没有静态接口的概念,可以用来引用类而不是对象。

    如果您有其他类想要互换使用,您可以摆脱静态并创建这些单例。

    【讨论】:

      猜你喜欢
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多