[英]A naming convention that works with IntelliSense
我开始命名我的类即时变量,如下所示:
Car car;
原因是我认为汽车是变量的完美描述,我不需要添加额外的信息。
这对我很有用,我很高兴,但有一个问题让我发疯。 如果我想做私有变量的类型,反之亦然,它会与IntelliSense混淆。
我见过人们这样做:
Car myCar;
我并不为此疯狂,但它可能会奏效。
关于如何做得更好的任何想法?
我想补充一点,这主要适用于在方法内创建的类的实例。
在看到这样的代码时,我会指出两件事。
你显然没有变量的命名约定 。 我认为这样的约定非常有用,特别是用于区分属性,成员变量和局部变量。
.NET生态系统中的常见约定是:
_privateVariable
(由Microsoft和很多设计器生成的代码使用,例如linq2sql)
m_privateVariable
(也是微软使用的,我认为TypedDatasets是使用这个约定生成的,但我不确定。)
PascalCaseAndNoExtras
camelcaseAndNoExtras
第二件事是关于命名类似于类的变量。 我认为最好不要将类的名称用作变量名。 一个好的变量名称应该在变量存在的范围内传达变量的类型和含义 。
例如,如果您想显示客户喜欢租用的汽车信息,您宁愿将变量m_CarToRent
为m_Car
而不是m_Car
。
您也可以使用this
关键字this.car
。 它将解决你的intellisense问题。 我自己更喜欢丹尼尔建议使用像_car
这样的_car
。
像我一样,有些人使用_Car
作为私有成员变量。
其中一个好的做法是:
public class Driver
{
private Car _car;
public Car Car { get { return _car; } }
public Driver(Car car)
{
_car = car;
}
}
_意味着,班级的客户看不到这个,并且它比'm_'更好,因为它不会向'_'或'my'添加任何东西,因为“my”已经是使用假设。
作为指导,您可以尝试安装Resharper http://www.jetbrains.com/resharper/ ,您很快就会习惯于一个好的命名约定。
在我尝试之前,我一直在改变我的命名约定风格,并且无法在这里和那里摆脱尴尬的'this'关键字。
第一种方法是使用前缀。 我使用m,e,v,i,p(MemberVariable,Event,Volatile,Index / Iterator,Pointer)等前缀,这使我能够在intellisense列表中看到这些不同的变量用法 ,并立即理解如何从名称中使用变量。 我真的不明白为什么有些人不这样做 - 这是一种经过长期验证的方法,可以加快编码速度,使编程更容易,更不易出错(特别是指针和指针指针)。 多年来,我看到团队中程序员拒绝遵循这些简单约定的许多可避免的错误。
第二是更好地区分类型名称和实例。 使用Car car
,甚至更糟糕的是,一辆房产: Car Car {get;set;}
正如你正确指出的那样令人困惑。 人们早就认识到,仅根据案例区分名称是件坏事,而且两个名称相同(类型,属性)的名称更差。
但是有一些方法可以应用于避免这种情况(特别是对于你可能没有使用前缀的参数/本地):
Vehicle car;
。 Vehicle licensedVehicle
。 这有助于您的实例代码描述的不仅仅是汽车,而是您期望的汽车形式 最后,随着您将来扩充代码,事情会变得更糟。 请记住在构建具有模糊(有效“不可伸缩”)命名的类层次结构时会发生什么:
你从像Vehicle.Type这样的名字开始。 这似乎是合乎逻辑的:车辆的类型(私人,乘客,轻货,重货)。 然后你添加派生类Car,Bus,Truck。 对于公共汽车(类型=乘客),您想要添加“类型”(小巴,长途汽车,双层)。 所以现在你有了基类Vehicle.Type和派生类Bus.Type,这意味着完全不同的东西。 通过调用它们来避免在两种情况下使用通用术语“类型”(例如)Vehicle.VehicleType和Bus.BusType极大地澄清了事情,并消除了程序员混淆它们的任何机会。
(这不是一个很好的例子,因为我基于汽车命名理念,但希望它能够跨越一般点 - 良好,具体,描述性的命名可以最大限度地减少您的类用户和代码维护者的困惑。面对未来)
我通常会在(local)变量前面使用“current”,特别是如果它在循环中。
Car currentCar = new Car();
和
foreach( var currentCar in CarList ) {
currentCar.Xxxx();
}
我发现这有助于提高可读性,但它完全是主观的。
这不仅令VS感到困惑,而且在概念上也令人困惑。 Car
应该是Accord
, Celica
或Mini
以及myCar
, car1
等实例:-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.