将C#属性命名为属性类型还是更短的字符串更好?

时间:2017-01-03 10:58:32

标签: c# properties naming-conventions

考虑以下代码

class ProductDefinition {}

A:

class Product { public ProductDefinition Definition {get;set}}

B:

class Product { public ProductDefinition ProductDefinition {get;set}}

(B)在使用此属性(例如

)时会导致轻微的冗余
product.ProductDefinition.Price

VS

product.Definition.Price

然而,它似乎是程序员习惯看到的东西。

是否有关于此主题的进一步阐述?

3 个答案:

答案 0 :(得分:1)

如果您的班级名为ProductDefinition,则为您的媒体资源Product命名是完全没有意义的。名为Definition的属性当然是Product(还有什么?)的定义,因此ProductDefinition将是冗余的。并没有像它的类型那样命名这个项目的做法。 C#允许这样做,但它没有强制要求。

线......

product.Definition.Price

... 100%清晰,没有任何裁员。这是产品定义的价格。

答案 1 :(得分:1)

我更喜欢使用Definition。 因为将来您可能希望为您的班级添加另一个定义,然后您的财产命名可能会有不一致,因为您会有一个FooDefinition和一个FooDefinition。我认为最好有BarDefinitionvar hobby = (prompt("Podaj swoje hobby: ")); if (hobby === null){ alert("Dlaczego nie podałeś swojego hobby?"); document.write("Moje hobby to: "); }else{ document.write(hobby); }

答案 2 :(得分:1)

我会选择Microsoft recommended guidelines

  

CONSIDER 为属性提供与其类型相同的名称。例如,   以下属性正确获取并设置名为的枚举值   颜色,因此属性名为Color:

public enum Color {...}
public class Control {
    public Color Color { get {...} set {...} }
}

因此,在这种情况下,我会将其构造为:

class ProductDefinition {}
class Product { public ProductDefinition ProductDefinition { get; set; } }

EDITED:

  • 我要考虑的另一点是有一些其他属性给Product对象另一个定义。例如(ProductOwnerDefinition):
class ProductDefinition { }
class ProductOwnerDefinition { }
class Product
{
    public ProductDefinition ProductDefinition { get; set; }
    public ProductOwnerDefinition ProductOwnerDefinition { get; set; }
}

此处Definition的使用可能会导致混淆。因此,最好将Property命名为类型的名称。

  • 我们还考虑另一个场景,我们使用StyleCop等静态代码分析工具。在这种情况下,如果我们不遵循推荐的模式,它将提出修改建议。这不是什么大问题,因为我们可以压制这些规则。但是,需要考虑前进的事情。