课堂设计:隐藏"替换"内部成员与否?

时间:2012-06-17 00:43:41

标签: c# .net class-design

我在连接类中封装对数据库的访问,这些连接类都从相同的基础实现继承。这个基础实现有一个protected LINQ提供程序用于数据库访问,许多子类将使用它 - 但不是全部。有些人可能需要他们自己的提供者,然后通常不会使用“默认”提供者。

这个“其他”提供者不会从默认提供者派生(但共享一个共同的准抽象祖先,它本身在任何地方都没用),但在相应的类中具有完全相同的角色,所以它会似乎很高兴能够以完全相同的方式使用它,即使用相同的语法。我可以通过使用new关键字隐藏相应的成员来实现此目的,但我不确定这是否是一种良好的做法。

一方面,这样做有助于避免意外使用错误的一个,因为只有一个。另一方面,习惯使用默认和特定提供程序的相同名称可能会导致实际忘记实现特定的名称并使用在此处使用的不正确的名称。因此,适当地命名默认值可能是有意义的;谁将开发一个特定的连接类将知道他们何时需要使用特定的提供程序,并提醒他们需要创建代码来实现它。

哪种推理更合理?我现在正倾向于后者。

1 个答案:

答案 0 :(得分:2)

new关键字几乎总是一个坏主意。对于没有其他选择的情况,这是“最后的手段”功能之一,在这种情况下,您肯定还有其他选择。

这两个提供程序是否具有不同的语义/ API,或者用法是否完全相同?如果是后者,您可能需要查看adapter pattern,并将该属性实现为类型为ILinqProviderAdapter的简单虚拟属性(您将定义并实现),并在适当的地方覆盖。