【问题标题】:Is hiding a member in the base class a bad smell in the code?在代码中隐藏基类中的成员是一种难闻的气味吗?
【发布时间】:2012-03-16 18:30:12
【问题描述】:

对我来说,在基类中隐藏一个成员以破解某些东西而不是重构一个糟糕的设计,这听起来更像是一个例外......

也许我错了。但是……

用'new'关键字隐藏基类中的成员是不是代码异味?

【问题讨论】:

  • 我不太明白你的意思。能给个代码示例吗?
  • 我在这里很困惑,在基类中创建一个新成员有什么用??因为基类中不能有 virtual 和 new 。只是虚拟的或新的。如果你在基类中有新的,你永远不能在派生类中覆盖它。那么整点有什么用呢?
  • 只要你在 Liskov 替换原则内工作,这根本没有问题!

标签: c# .net new-operator member-hiding


【解决方案1】:

这取决于意图。例如,如果目的是为了澄清具体的返回类型,那么它可能不是不合理的。这里的经典例子是DbConnection有用SqlConnection 重新声明CreateCommand 等,通过返回SqlCommand 而不是DbCommand,因为SqlCommand 具有许多特定于平台的功能,否则会很痛苦。不过这里有一个关键点,DbConnection 方法仍然有效,而且这两种方法的目的和意义是相同的。

如果您正在这样做并且方法做一些不同的事情,或返回一些不同的东西,那么在某些情况下它可能会引起混乱。有时它仍然是有意义的;p 如果他们做同样的事情,并且只是通过正式说明对调用者有用的实现有所不同,那么很好。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2010-09-20
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2019-07-25
    相关资源
    最近更新 更多