C#类命名约定:是BaseClass还是ClassBase或AbstractClass

Son*_*Ali 107 c# naming-conventions base-class

命名基类的推荐方法是什么?它是否在类型名称前加上" Base "或" Abstract ",或者我们只是用"Base"作为后缀?

考虑以下:

type:ViewModel例如MainViewModel,ReportViewModel

基类:BaseViewModelViewModelBaseAbstractViewModel

还要考虑:

type:Product例如VirtualProduct,ExpiringProduct

基类:BaseProductProductBaseAbstractProduct

您认为哪个更标准?

class Entity : EntityBase
{
}
Run Code Online (Sandbox Code Playgroud)

要么

class Entity : BaseEntity
{
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 84

有与基本后缀,例如框架的例子System.Configuration.Provider.ProviderBase,System.Web.SessionState.SessionStateStoreProviderBase.

但绝不是在框架中的所有抽象基类遵循这个惯例(例如System.Data.Common.DbParameter,System.Data.Common.DbCommand).

我个人会避免使用后缀,除非我想强调它是一个抽象类的事实,并认为该类的用户可能希望该名称表示具体的实现.

  • “如果类打算在公共 API 中使用,请避免使用“Base”后缀命名基类。” 框架设计指南,第 174 页 (5认同)

Pau*_*ier 44

以上都不是.考虑基类提供的目的; 把它命名为.例如,汽车和自行车的基类可以是车辆.

如果你创建基类只是为了拥有一个类的基类,并且没有其他目的或理由,那么你可能做错了什么.

  • 值得注意的是,带有"Base"后缀的.NET Framework中的某些类在版本1.0之前被命名,Microsoft不再遵循这些约定....但它们现在无法更改名称.Microsoft的框架设计指南一书6.2节(涵盖基类)特别建议不要使用"Base"后缀. (44认同)
  • 情况并非总是如此,您将在框架中找到许多Base*类.CollectionBase,DictionaryBase ....等 (14认同)
  • 正如Warren所提到的,Microsoft框架设计指南一书,关于基类的6.2节:https://msdn.microsoft.com/en-us/library/ms229003(v = vs.110).aspx他们说要避免使用Base后缀:"如果该类用于公共API,则AVOID命名基类具有"Base"后缀." (4认同)
  • 我见过在许多公司中经常使用多种面向对象语言的做法是"Base"指定的基类只是为了继承而不是直接使用.在您的示例中,名为"Vehicle"的类听起来像是可以使用和"驱动"的东西 - 它声称自己是一个载体.但是,如果基类被命名为"车辆部件"或"车辆必需品"或"车辆套件" - 我们知道它不是直接可用的东西,而是各种车辆的基础. (3认同)
  • 如前所述,《设计指南》一书建议避免使用 Base 后缀。然而,这本书没有提供任何解释、理由或替代方案;缺乏逻辑推理,我们只能推断审美动机。DG 指出“Base-ness”可以用其他方式来表述(例如“抽象”);那么我们给这个类起什么名字呢?该名称应在文件夹/项目/等中区分,并唯一表示预期的实用程序。“XBase”这个名称以一种非常简单和清晰的方式满足了所有这些要求。也许我们可以避开这本书,而不是避开后缀。 (2认同)

Yes*_*ke. 6

如果您在谈论虚拟基类,Microsoft 的标准是 ClassnameBase(如 CollectionBase。)

  • 来自文档:“如果该类打算在公共 API 中使用,请避免使用“Base”后缀命名基类。” (2认同)