两个C#命名约定:您怎么看?

Jef*_*ght 2 c# naming-conventions

我有两个特定的 C#编码约定,我一直在练习复杂的感觉.我很想知道人们的想法.他们是:

#1.在类之后的名称实例,它是camelCased的实例

#2:"匹配属性名称"

这是基本原理:

#1.在类之后的名称实例,它是camelCased的实例

我使用它作为命名约定的默认设置.当然,也有例外.但始终使用它可以显着提高代码清晰度和可维护性.代码如下所示:

var dataConnection = new DataConnection();
//not: var dataConn, dbConn, sqlConn, myDbPickOfTheDay etc.

FileInfo fileInfo = new FileInfo();

Timer timer = new Timer(); 

//etc.
Run Code Online (Sandbox Code Playgroud)

我正处于这样的代码导致我身体疼痛的地步:

DataConnection dbConn = new DataConnection();
Run Code Online (Sandbox Code Playgroud)

我不能强调这个约定如何消除变量名称游戏的痛苦和愤怒.

这种惯例与试图以试图表明实例正在做什么的方式命名事物形成鲜明对比,这相当于试图创造性地将业务案例嵌入代码中.代码有一种方法可以重构到这些原始名称最多会产生误导的程度.

对我来说,这个惯例是黄金.它还可以防止对同一件事略微调整变量名的可怕做法.

实践中该惯例的一个例子是:

class Person { ...
   public string FirstName { get; set; }

//and then
var person = new Person();
person.FirstName = firstName; //where firstName comes from somewhere else.
Run Code Online (Sandbox Code Playgroud)

很容易阅读.很无聊.在维护代码方面,无聊很有用.

但是,这个惯例引导我到#2:

#2"匹配属性名称"(缺少更好的标题)

这是一个例子:

public class ShoppingCart { ..
  private Item item;
  public Item Item {  //<---- ?
  get { return this.item; } ...
Run Code Online (Sandbox Code Playgroud)

编译器非常满意这一点.事实上,它暴露了一个非常好的界面:

//notice how tempting it is to just say "ShoppingCart cart ... "
ShoppingCart shoppingCart = new ShoppingCart();  
shoppingCart.Item = item;
Run Code Online (Sandbox Code Playgroud)

现在,替代方案是创造性的 - 你实际上需要为Item打出两个好的变量名:公共属性名和私有成员变量名.

你有多少次看过这个并且想立即退休?

 public class ShoppingCart { ..
      private Item cartItem;
      public Item ShoppingCartItem { 
      get { return this.cartItem; } ..
  ///....
  ShoppingCart userShoppingCart = new ShoppingCart();
  userShoppingCart.ShoppingCartItem = userSelection;
Run Code Online (Sandbox Code Playgroud)

关于#1的约定我感觉非常强烈,我认为我可以和#2一起生活.

你怎么看 ?

Cha*_*ant 12

如果你不知道并且你在乎,C#已经有了命名标准

http://msdn.microsoft.com/en-us/library/xzf533w0(VS.71).aspx

此外,再次查看您的约定......这里有更多建议.

  • fileInfo看起来很像FileInfo,但除了它的类型之外没有任何意义,我可以通过鼠标悬停在类型或智能感知中快速获得.我建议使用含义和一些上下文命名变量(如果可用).remoteWebServerLog,localWebServerLog,甚至是localWebServerLogFileInfo,如果你喜欢名字中的类型.

    如果我可以提交任何回复代码的建议,那么你之后会写出6 + mos.你会摸不着头脑,试图弄清楚你所有的dbConn和fileInfo是什么.什么文件?什么db?很多应用都有几个dbs,这个dbConn是OrdersDB还是ShoppingCartDB?

  • 类命名应该更具描述性.我们更喜欢ShoppingCartItem而不是Item.如果每个ListBox,DropDown等都将它们的集合项命名为"Item",那么您将与许多名称空间发生冲突,并且将被迫使用MyNameSpace.ShoppingCart.Item来丢弃您的代码.

说了这么多......即使经过多年的编码,我仍然搞砸了,并没有100%的时间遵守规则.我甚至可能使用了FileInfo fi = ...但这就是为什么我喜欢我的Resharper"Refactor-> Rename"命令并经常使用它.

  • ■设计具有很好的一个太:http://www.idesign.net/idesign/DesktopDefault.aspx同样有趣为指针,C#是单声道的编码指南:http://mono-project.com/Coding_Guidelines也许他们都应该拉他们自从MS提供一个?;) (3认同)