构造函数参数的命名约定?

时间:2011-04-18 19:34:16

标签: c# constructor properties naming-conventions

嘿伙计们,我总是遇到一个问题,即类中的Public变量的名称和我传递给相同类构造函数的参数之间的相似性。

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

例如:

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

用户会看到这些名称和类型,并且只能根据其类型和名称知道它们是什么,排除任何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.

5 个答案:

答案 0 :(得分:16)

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

编辑:如果您的属性在构造函数中只是SET,我建议将setter设为私有(此处的示例代码中未显示)。如果永远不再设置值,另一个好的做法是让它们由字段支持,并使字段为只读。这有点超出了您的问题范围,但与定义和命名字段和属性有关。

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

注意:即使是Stack Overflow语法高亮显示,与原始问题中的代码相比也是可读的。

答案 1 :(得分: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;
}

另请阅读有关.NET框架样式的MSDN设计指南,以进一步详细讨论其他样式元素。这些标准有很好的文档记录 - 因此确实不应该有太多的猜测工作。 http://msdn.microsoft.com/en-us/library/ms229042.aspx

享受!

答案 2 :(得分:0)

请参阅MS命名约定herehere

答案 3 :(得分:0)

我也使用驼峰套管,但更喜欢在参数名称左边添加'a'前缀 (' a '代表参数,它不是一篇文章)。
我使用驼峰套管,没有任何前缀,用于例程的本地变量 这样做,您可以乍一看从参数中获取局部变量 但我知道这不是常见的做法 我对字段使用与Doug相同的约定,因此您最终会得到:

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

只是我的两分钱。

答案 4 :(得分:-1)

名称应该在定义上绝不是大写。在我看来,后缀非常需要区分输入世界和类属性。

我没有看到任何不好的事情:

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