什么时候,如果属性的名称应该包含类的名称?

时间:2009-11-28 23:07:53

标签: c# naming-conventions

public class Fruit
{
    // choose one
    public int Id { get; set; }
    public int FruitId  get; set; } // redundant or usefully more descriptive?

    // choose one
    public string Name { get; set; }
    public string FruitName { get; set;} // redundant or usefully more descriptive?
    public string Fruit { get; set; } // or what about this?
}

水果的识别号码和名称是您的首选约定?为什么?是否有其他例子可以用不同的方式回答?

6 个答案:

答案 0 :(得分:9)

public class Fruit
{
    public int Id { get; set; }
    public string Name { get; set; }
}

我知道这些属性是Fruit的属性,为什么要重复这个名字呢? SomethingId对我来说是外国的关键财产。

答案 1 :(得分:7)

通常,属性名称应以自己命名,而不是以类命名。

五种情况,其中类名可能在类的成员上用作前缀或后缀:

  1. 所需的属性名称是您所用语言的保留字。例如,FruitType而不是Type。在大多数情况下,最好将属性命名为其他内容。

  2. 该类充当工厂并返回其自身的实例。例如,如果Fruit有一个名为“GetFruitById”的静态方法,它返回一个水果。在这种情况下,您可能最好为该方法使用单独的FruitFactory类。

  3. 该类包含其自身类型的其他内容。在你的例子中,也许,如果Fruit是一个显示水果进化链接的图表,每个Fruit实例都可以包含一个名为“DescendantFruitList”的水果列表。有可能,你可以删掉“水果”这个词,它仍然是完全描述性的。

  4. 域模型中类的名称与常用编程命名约定中使用的单词匹配。示例:表示 literal (真实世界)Factory,List,Dictionary等的对象,并且还需要在编程中对相关类使用相同的单词。

  5. 与数据库的O / R映射的兼容性或成员碰巧具有相同单词的外部接口的实现。例如,如果Fruit实现了现有的IFruitStandProduct接口。在这种情况下,您不应对命名的巧合负责。

答案 2 :(得分:4)

在我看来,几乎总是IdName是首选,并且不建议冗余地指定类名。但是,一个值得注意的例外是当IdName引用内部标识符或名称时FruitNumberFruitName引用“真实世界标识符”或“显示名称”实体,由于某种原因,您不想将其命名为DisplayName

答案 3 :(得分:2)

如果客户已经这样做,我只会在属性名称中冗余地指定类名。保持无处不在的语言是值得的。

答案 4 :(得分:1)

我有时需要这样做(很少),例如:

class Fruit {
 public int ID {get; set;}
}

class Apple : Fruit {
// I want to call this ID also but it refers to a different ID than the base ID
 public int AppleID {get; set;}
}

答案 5 :(得分:-1)

从不。

自从。

严重。