【问题标题】:Using an interface to ensure every class has the same property使用接口确保每个类都具有相同的属性
【发布时间】:2013-09-10 09:17:58
【问题描述】:

我在获取查询字符串值的页面上有一个属性,我需要它出现在所有相关页面上。这些页面已经继承了一个基类,我不想要这里的属性,因为不是所有继承这个基类的东西都需要这个特定的属性。

我的想法是用这个属性创建一个接口,让每个需要这个属性的页面都实现这个接口。

这是一种好的做法,还是应该将基类继承到仅具有此属性的另一个类中,然后让所有页面继承此属性而不是基类?

谢谢

【问题讨论】:

    标签: .net vb.net oop inheritance interface


    【解决方案1】:

    接口不需要您复制代码!您可以使用委托。这类似于接受的答案,除了一种方式。接口可用于向其他类公开契约,允许它们以一致且强大的方式与您的类交互。那么一个关键问题就变成了,外部代码是否想要“知道”您的 Form 是否具有该功能?

    delegation-instead-of-inheritance

    【讨论】:

      【解决方案2】:

      我假设属性的实现在所有需要它们的页面上都是相同的? 如果你使用一个接口,所有的页面都需要实现这个,这会导致大量的复制/粘贴代码。 编写某种提供程序类,您可以将页面实例(如果需要)传递给它并使用此类来获取属性不是更好吗? 我认为您最好在这里使用组合而不是继承,因为如果您创建另一个基类,您将使用另一个基类扩展您的页面层次结构。

      【讨论】:

      • 我认为你是对的,说实话,我继承了(不是双关语)有点混乱。在我考虑重构之前,我需要花一些时间看看这些页面到底在做什么。我会投票,因为这是我准备好的方式
      【解决方案3】:

      我想说这并不重要,但我更喜欢另一个继承级别,因为您只需编写一次代码。有了接口,你就更灵活了,也许在某些情况下你不需要自动属性,而是检查 null 或类似的东西。

      因此,如果它始终是相同的属性,则使用继承的第二个基类,如果您在 getter 或 setter 中有不同的检查,则使用接口。

      【讨论】:

      • 谢谢,接口的缺点是我每次都要写实现,但也强制这些页面使用属性。 (只要记得实现接口!)
      猜你喜欢
      • 2018-01-01
      • 2013-03-28
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 2017-11-09
      • 2021-05-14
      • 2016-01-06
      • 2022-01-13
      相关资源
      最近更新 更多