【问题标题】:Implementing base members of a derived interface实现派生接口的基成员
【发布时间】:2013-09-01 01:28:10
【问题描述】:

假设我有以下接口:

Public Interface IFooBase
    Sub Bar()
End Interface

Public Interface IFoo
    Inherits IFooBase

    Sub Zim()
End Interface

我了解实现IFoo 的类隐式实现IFooBase,并且所有IFooBase 成员都可以通过派生接口(例如Public Sub Bar() Implements IFoo.Bar)毫无问题地指定,并且如果类指定,则不会给出错误它实现了基接口和派生接口。

那么这里的最佳做法是什么?我的直觉是该类应该实现如下:

Public Class FooClass
    Implements IFooBase, IFoo

    Public Sub Bar() Implements IFooBase.Bar
    End Sub

    Public Sub Zim() Implements IFoo.Zim
    End Sub
End Class

我的推理是,通过显式指定基接口并在定义它们的级别声明类成员,代码会更加清晰,如果派生接口曾经被重构、删除或替换,那么需要进行的重构受到严格限制。但是这种方法有什么遗漏吗?

【问题讨论】:

  • 这个问题似乎离题了,因为它是关于代码实现的,最好在CodeReview 上提供。
  • 这个问题是关于 VB.Net 接口的行为、继承以及它们在类中的实现。 CodeReview 显然是一个用于在实际项目中审查真实代码的网站。我在stackoverflow.com/help/on-topic 中没有看到任何表明我跑题的地方。

标签: .net vb.net interface coding-style


【解决方案1】:

通过同时实现IFooBaseIFoo,您将隐含地向任何人(其他)说明IFoo 不继承自IFooBase 的代码,尽管实现了这两者,即使IFoo 继承自@ 987654326@没有错。

但是,如果 IFoo 被更改为也继承自另一个接口 IBar(接口可以有多重继承,但不能有类),您将隐含地要求 FooClass 也实现 IBar,即使FooClass 不应需要额外的 Implements IBar

另外,如果你改变了基接口,如果你的实现类显式实现它,你会比隐式实现它更复杂。

我相信只实现派生最多的接口,而不是所有的父接口。

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 2010-09-22
    • 2014-06-17
    • 2013-09-30
    • 1970-01-01
    • 2012-03-14
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多