枚举命名约定 – 复数
我问这个问题,尽pipe阅读类似,但不完全是我想在C#命名约定枚举和匹配属性
我发现我倾向于用复数命名枚举,然后把它们用作单数,例如:
public enum EntityTypes { Type1, Type2 } public class SomeClass { /* some codes */ public EntityTypes EntityType {get; set;} }
当然这是有效的,这是我的风格,但是谁能find这样的惯例潜在的问题呢? 虽然我有一个“丑陋”的名字,但是“状态”
public enum OrderStatuses { Pending, Fulfilled, Error, Blah, Blah } public class SomeClass { /* some codes */ public OrderStatuses OrderStatus {get; set;} }
附加信息:也许我的问题不够清楚。 命名我定义的枚举types的variables时,我经常不得不认真思考。 我知道最好的做法,但是这并不能帮助我减轻命名这些variables的工作。
我不可能公开所有我的枚举属性(称为“状态”)为“MyStatus”。
我的问题:任何人都可以find上述我的约定潜在的问题? 这不是最佳做法。
问题改述:
那么,我想我应该问这样的问题:有人可以出一个很好的通用的方式来命名枚举types,使用时,枚举“实例”的命名将是非常简单的?
Microsoftbuild议对Enum
使用单数,除非Enum
表示位域(也使用FlagsAttribute
)。 请参阅枚举types命名约定 (Microsoft 命名指南的子集)。
为了回应您的澄清,我发现以下任何一点都没有错:
public enum OrderStatus { Pending, Fulfilled, Error }; public class SomeClass { public OrderStatus OrderStatus { get; set; } }
要么
public enum OrderStatus { Pending, Fulfilled, Error }; public class SomeClass { public OrderStatus Status { get; set; } }
我开始用复数命名枚举,但后来改为单数。 只是在使用的地方似乎更有意义。
enum Status { Unknown = 0, Incomplete, Ready } Status myStatus = Status.Ready;
相比于:
Statuses myStatus = Statuses.Ready;
我觉得单数forms听起来更自然。 我们一致认为,在一个地方发生枚举时,我们认为“这是一群凡是”,但是在使用它的时候,可能在很多地方我们都在想“这是一个什么” 。
这种情况从来不适用于复数。
一个enum
显示某个或另一个属性。 我举个例子:
enum Humour { Irony, Sarcasm, Slapstick, Nothing }
你可以有一个types,但是可以把它想成多个而不是复数:
Humour.Irony | Humour.Sarcasm
而不是
Humours { Irony, Sarcasm }
你有一种幽默感,你没有幽默感。
一般来说,最佳实践build议是单一的,除了那些具有[Flags]属性的枚举(因此它可以包含位域),这应该是复数。
阅读你编辑的问题后,我感觉你可能认为属性名称或variables名称必须不同于枚举types名称…它不。 以下是非常好的…
public enum Status { New, Edited, Approved, Cancelled, Closed } public class Order { private Status stat; public Status Status { get { return stat; } set { stat = value; } } }
最佳实践 – 使用单数。 你有一个组成Enum的项目列表。 当您说Versions.1_0
时,使用列表中的项目听起来很奇怪。 由于只有一个1_0版本,所以说Version.1_0
更有意义。
来不及了…
你的问题和你提到的问题有一个重要的区别(我问:-):
您将枚举定义放在类的外面,这样您可以为枚举和属性使用相同的名称:
public enum EntityType { Type1, Type2 } public class SomeClass { public EntityType EntityType {get; set;} // This is legal }
在这种情况下,我会遵循MS指南,并使用enum(复数标志)的单数名称。 这是最容易的解决scheme。
我的问题(在另一个问题 )是枚举是在类的范围内定义的,防止使用一个名为完全在枚举后面的属性。
如果你正试图写简单直接的代码,像这样:
public class Person { public enum Gender { Male, Female } //Won't compile: auto-property has same name as enum public Gender Gender { get; set; } }
您的select是:
-
忽略MSbuild议,并在枚举名称上使用前缀或后缀:
public class Person { public enum GenderEnum { Male, Female } public GenderEnum Gender { get; set; } }
-
将类的枚举定义移到另一个类中。 这是上述的一个简单的解决scheme:
public class Characteristics { public enum Gender { Male, Female } } public class Person { public Characteristics.Gender Gender { get; set; } }
在另一个线程的C#命名约定枚举和匹配属性有人指出我认为是一个非常好的主意:
“我知道我的build议不符合.NET命名约定,但是我个人使用'E'作为枚举前缀,使用'F'作为枚举标志(类似于我们如何在I前加接口)。