C# 类设计:隐藏;取代;内部成员还是不?

C# 类设计:隐藏;取代;内部成员还是不?,c#,.net,class-design,C#,.net,Class Design,我将对数据库的访问封装在所有继承自同一基本实现的连接类中。这个基本实现有一个受保护的LINQ提供程序,用于许多子类(但不是所有子类)将使用的数据库访问。有些人可能需要自己的提供者,然后通常不使用“默认”提供者 这个“其他”提供程序不是从默认的提供程序派生的(而是共享一个公共的准抽象祖先,它本身在任何地方都没有用处),而是在相应的类中具有完全相同的角色,因此能够以完全相同的方式使用它似乎很好,即使用相同的语法。我可以通过使用new关键字隐藏相应的成员来实现这一点,但我不确定这是否是一种好的做法 一

我将对数据库的访问封装在所有继承自同一基本实现的连接类中。这个基本实现有一个
受保护的
LINQ提供程序,用于许多子类(但不是所有子类)将使用的数据库访问。有些人可能需要自己的提供者,然后通常不使用“默认”提供者

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

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


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

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

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