2011-04-18 95 views
3

嗨,大家好,我总是遇到类之间公共变量名称和我传入相同类构造函数的参数之间的相似性问题。构造函数参数的命名约定?

当您定义对象的新实例时,例如Car。用户/程序员唯一可以看到的是它所查找的参数的名称和类型。

例如:

public Car(Color BodyColor, int NumOfDoors, int SizeOfWheels) 
{ 
} 

用户将看到这些名称和类型,并只能够知道他们是根据其类型和名称是什么,exluding任何XML摘要标签。

现在,我们总是希望我们的公共变量也非常具体。

例如:

public Color BodyColor { get; set; } 
public int NumOfDoors { get; set; } 
public int SizeOfWheels { get; set; } 

现在,我们可以得到我的问题。使用这些单行属性,而不是定义变量的私有实例并为其创建属性,如何让这些变量名更清晰?

我想使用命名约定,其他用户会发现可以理解和易于阅读。

眼下的构造看起来像

public Car(Color BodyColor, int NumOfDoors, int SizeOfWheels) 
{ 
    this.BodyColor = BodyColor; 
    this.NumOfDoors = NumOfDoors; 
    this.SizeOfWheels = SizeOfWheels; 
} 

这是什么其他的C#程序员会写?是否有一个已经存在的命名约定?乍一看,上面的语句看起来有点乱,特别是如果你省略this.

+2

我用骆驼情况下,而不是Pascal大小写的构造函数ARGS(和几乎任何其他方法参数),即'公共车(彩色bodyColor,INT numOfDoors,INT sizeOfWheels)' – BoltClock 2011-04-18 19:35:59

+0

相反BodyColor的,我会建议只是颜色,或者,是否会有其他的颜色,CarColor – Andre 2011-04-18 19:41:40

+0

@Andre难道是明智和标准说颜色颜色? BodyColor引用Body的颜色,其中RimColor将指定Rims的颜色。 CarColor对我来说似乎有点过于宽泛。 – 2011-04-18 19:42:51

回答

13

我从来没有见过第一个字母大写的方法参数。我建议不要这样做,因为它不是一个标准。 '这'也变得没有必要。在我看来,下面的代码更具可读性。此外,您会注意到.NET API调用的方法参数没有首字母大写。这适用于任何函数原型,而不仅仅是构造函数。

编辑:如果您的属性只在构造函数中设置,我会建议使setter私人(这里没有显示在我的示例代码中)。另一个好的做法是,如果值再也没有被设置,那就是让它们以字段为后盾,并使字段为只读。这有点超出了你的问题的范围,但与定义和命名字段和属性有关。

public Car(Color bodyColor, int numOfDoors, int sizeOfWheels) 
{ 
    BodyColor = bodyColor; 
    NumOfDoors = numOfDoors; 
    SizeOfWheels = sizeOfWheels; 
} 

注意:与原始问题中的代码相比,即使Stack Overflow语法突出显示也能使其具有可读性。

+2

猜猜我的评论应该是一个答案,但+1到你啦:) – BoltClock 2011-04-18 19:38:32

+3

'this.BodyColor'并不少见,因为一个小错字:'bodyColor = bodyColor',突然你的程序会默默地失败!请注意,错字'this.BodyColor = BodyColor'在运行时仍然会失败......幸运的是,Resharper *(或简单的Visual Studio?)会警告您这两个错误。 *并且*对于参数和字段/属性,单独的语法着色是很好的情况! – 2011-04-18 19:40:14

+0

啊!我想我可以快速浏览任何.NET方法。谢谢! – 2011-04-18 19:40:38

0

.net约定是使用骆驼外壳作为函数参数。所以,你的构造可能类似于如下:

public Car(Color bodyColor, int numOfDoors, int sizeOfWheels) 
{ 
} 

而且尽可能的属性去,你有套管正确的那些,但通常你可能会设置为属性而不是属性本身的私有实例字段直接 - 假设你在设置方面没有任何逻辑,如果属性。

我通常让我的实例字段开始用下划线所以设置实例字段的属性从你的构造可能看起来更像以下几点:

public Car(Color bodyColor, int numOfDoors, int sizeOfWheels) 
{ 
    this._bodyColor = bodyColor; 
    this._numOfDoors = numOfDoors; 
    this._sizeOfWheels = sizeOfWheels; 
} 

也请阅读风格为MSDN的设计指导方针.NET框架进一步详细讨论其他样式元素。这些标准有很好的记录 - 所以实际上不应该有太多的猜测工作。 http://msdn.microsoft.com/en-us/library/ms229042.aspx

享受!

+0

如问题所述,我使用的是单行属性。我的集合中没有任何逻辑,但是,如果我有一个私有字段,我会使用_variableName作为我的约定。 – 2011-04-18 19:48:54

0

我用骆驼外壳为好,但更喜欢在参数名
左侧添加一个“A”字头(以下简称“一个”代表参数,这并不意味着一篇文章)。
我使用骆驼套装,没有任何前缀的任何可变的本地例程。
这样做,您可以乍一看地告诉参数中的局部变量。
我知道这不是通常的做法。
我用的是相同的约定对道格的字段,所以你结了:

public Car(Color aBodyColor, int aNumOfDoors, int aSizeOfWheels) 
{ 
    this._bodyColor = aBodyColor; 
    this._numOfDoors = aNumOfDoors; 
    this._sizeOfWheels = aSizeOfWheels; 
} 

只是我的两分钱。

+0

为什么downvote? – 2016-02-17 11:08:08

+0

参数并不假设长期存在,你的方法不应该是+20行,所以在这里有一个小前缀对我来说是有意义的。可能不理想,但在很多情况下是有道理的。 – daniloquio 2016-10-11 17:22:27

+0

我同意你的观点,但这不是,正如我写的,C#中的常见做法并遵循惯例通常是件好事。今天,我不再使用这个标准。 – 2016-10-23 19:31:33

-1

名称应该definetively永远是大写字母。根据我的观点,后缀是非常需要区分输入世界和类属性的。

我看不出有什么不好这一点:

public Car(Color bodyColorInput, int numOfDoorsInput, int sizeOfWheelsInput) 
{ 
    this.BodyColor = bodyColorInput; 
    this.NumOfDoors = numOfDoorsInput; 
    this.SizeOfWheels = sizeOfWheelsInput; 
}