构造函数参数的命名约定

本文关键字:命名约定 参数 构造函数 | 更新日期: 2023-09-27 17:50:24

我总是有一个问题,类中公共变量的名称和我传递给同一个类构造函数的参数之间的相似性。

当您定义一个对象的新实例时,例如,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.

构造函数参数的命名约定

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

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

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

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

.net的约定是使用驼峰式大小写来表示函数参数。所以你的构造函数可能看起来像这样:

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

同样,就属性而言,你有正确的大小写,但通常你可能会为属性设置私有实例字段,而不是直接设置属性本身-这假设你在set端没有任何逻辑,如果属性。

我通常让我的实例字段以下划线开头,所以从构造函数中设置属性的实例字段可能看起来更像下面这样:

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

享受吧!

参见MS命名约定。

我也使用驼峰式大小写,但更喜欢在参数名
的左边添加一个'a'前缀('a'表示参数,不表示冠词)。
对于例程的任何局部变量,我使用驼峰式大小写,没有任何前缀。
这样,第一眼就可以看出局部变量和参数。
我知道这不是通常的做法。
对于字段,我使用与Doug相同的约定,因此您最终将得到:

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

名称绝对不能是大写的。在我看来,后缀是区分输入世界和类属性非常必要的。

我不觉得这有什么不好:

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