我开始命名我的类即时变量,如下所示:
Car car;
原因是我认为汽车是变量的完美描述,我不需要添加其他信息。
这对我很有用,我很高兴,但有一个问题让我发疯。如果我想做私有变量的类型,它会与IntelliSense混淆,反之亦然。
我见过人们这样做:
Car myCar;
我并不为此疯狂,但它可能会奏效。
关于如何做得更好的任何想法?
我想补充一点,这主要适用于在方法内创建的类的实例。
答案 0 :(得分:3)
在看到这样的代码时,我会指出两件事。
您显然没有变量的命名约定。我认为这样的约定非常有用,特别是对于区分属性,成员变量和局部变量。
.NET生态系统中的常见约定是:
_privateVariable
(由Microsoft使用
还有很多设计师生成的代码,
例如LINQ2SQL)
m_privateVariable
(也被Microsoft使用,我认为TypedDatasets是
使用这个约定生成,但我不确定。)
PascalCaseAndNoExtras
camelcaseAndNoExtras
第二件事是关于命名类似于类的变量。我认为最好不要将类的名称用作变量名。 一个好的变量名称应该在变量所在的范围内传达变量的类型和含义。
E.g。如果您想显示客户喜欢租用的汽车信息,您宁愿为变量m_CarToRent
而不是m_Car
命名。
答案 1 :(得分:2)
您还可以使用this
关键字this.car
。它将解决你的intellisense问题。
我自己更喜欢Daniel建议使用像_car
这样的下划线。
答案 2 :(得分:1)
有些人和我一样,使用_Car
作为私有成员变量。
答案 3 :(得分:1)
其中一个好的做法是:
public class Driver
{
private Car _car;
public Car Car { get { return _car; } }
public Driver(Car car)
{
_car = car;
}
}
_意味着,班级的客户看不到这个,并且它比'm_'更好,因为它不会向'_'或'我'添加任何东西,因为“我的”已经是一个假设用法。
作为指导,您可以尝试安装Resharper http://www.jetbrains.com/resharper/,您很快就会习惯于一个好的命名约定。
在我尝试之前,我总是更改我的命名约定样式,并且无法在这里和那里摆脱尴尬的'this'关键字。
答案 4 :(得分:1)
第一种方法是使用前缀。我使用诸如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极大地澄清了事情,并消除了程序员混淆它们的任何机会。
(这不是一个很好的例子,因为我基于汽车命名理念,但希望它能够跨越一般点 - 良好,具体,描述性的命名可以最大限度地减少您的班级用户和维护者的混淆。你的代码将来会面临)
答案 5 :(得分:1)
我通常会在(local)变量前面使用“current”,特别是如果它在循环中。
Car currentCar = new Car();
和
foreach( var currentCar in CarList ) {
currentCar.Xxxx();
}
我发现这有助于提高可读性,但它完全是主观的。
答案 6 :(得分:0)
不仅令VS感到困惑,而且它在概念上也令人困惑。 Car
应该是Accord
,Celica
或Mini
以及实例myCar
,car1
等等: - )