布尔属性命名

时间:2010-10-11 13:29:03

标签: c# naming-conventions

我有一个属性,指示是否可以修改实例。它应该命名为 MayModify 还是 CanModify

6 个答案:

答案 0 :(得分:29)

IsModifiable

CanModify

AllowChanges

MayModify听起来太条件了,有点灰色而不是布尔黑白。

我通常会使用动词后跟名词。即:

允许,然后更改。

CanModify是我认为令人困惑的两个动词/动作。

答案 1 :(得分:21)

CanModify是一个非常好的名字,但在这种情况下会出错。命名属性时,您必须考虑典型用法。

MyClass widget;

if (widget.CanModify) { ... }

显然,正在修改其他内容的小部件。但是你想表达消费者是否可以修改小部件。所以这个名字会非常糟糕。

我在这种情况下的偏好是:

if (widget.IsWritable) { ... }

if (widget.IsReconfigurable) { ... }

取决于“修改”小部件的含义。

但即便

if (widget.CanBeModified) { ... }

会比CanModifyMayModify好得多,两者都听起来像是widget允许修改其他内容。

答案 2 :(得分:3)

都不是。

IMO你应该使用Is前缀。有点推荐。

所以我会选择IsModifiable

请参阅此主题:Naming Conventions: What to name a boolean variable

答案 3 :(得分:3)

无法修改的实例是只读的,不是吗?那么IsReadOnly

答案 4 :(得分:2)

CanModify 更好,因为可以代表能力。但五月更像是某人不反对,而不是那么明确。

答案 5 :(得分:0)

名称“IsReadOnly”有时已经用于此类上下文,因此它可能是一个很好的名称。不过,我认为区分三种类型的实例是有用的:

  1. 可直接修改的那些
  2. 那些不可变的
  3. 那些不能直接修改但可能被其他东西修改的内容(示例包括WaitHandle或可写集合上的只读包装)

如果IsReadOnly为false,那么显然一个项目是类型1.但是,如果它是真的,则可能不清楚它是2型还是3型。根据对象的性质,拥有IsFrozen属性可能会有用除了IsReadOnly。想要知道对象是否可以在外部更改的代码将使用IsFrozen;想要知道是否允许更改对象本身的代码将使用IsReadOnly。