你如何命名构造函数参数和成员变量?

时间:2009-03-20 12:29:50

标签: c# naming-conventions

我在命名类的内部变量时不使用前缀(我知道有些但是我没有开始“为什么你......”辩论)。我只是喜欢这样。问题是有时在构造函数中传递相同的参数,我最终会混淆如何命名它们。例如:

public class SampleClass
{
    private int classId;
    private string className;

    public SampleClass (int XclassIdX, string XclassNameX) {
        classId = XclassIdX;
        className = XclassNameX;
    }
}

如何命名XclassIdX和XclassNameX?

可能做的一件事是:

public class SampleClass
{
    private int classId;
    private string className;

    public SampleClass (int classId, string className) {
        this.classId = classId;
        this.className = className;
    }
}

不确定这是一个好主意还是还有其他更优雅的方式?

8 个答案:

答案 0 :(得分:17)

我认为您正在描述的解决方案,构造函数参数的名称相同,并且您使用this为类成员添加前缀,这很好。很清楚,它很简洁,并且没有混淆你的意思。

答案 1 :(得分:4)

我只是使用this方法;然后我所有的变量和字段都反映了他们的意图不要做X事 - 那只是丑陋的;-p

答案 2 :(得分:3)

我这样的情况,我认为任何一种方式都不比其他方式更好。但是为了那些可能需要维护你的代码的人(以及你自己的代码),我只想选择一种方法来做它并保持一致。

答案 3 :(得分:1)

简答:

如果成员是静态的,则

成员参数与“m_”和“p_”或“s_”作为前缀

不要修饰属性本地,当您认为必须将它们命名为相同(忽略大小写)时,请通过在属性前添加“this”来解决冲突。 ”

说明:

考虑至少有四(4)种不同类别的可读/可分配名称需要区分:本地变量成员变量(实例和静态),< strong>属性,方法参数。所有四个类别都可能出现在一个代码块中,因此它们都需要明确的区分特征。

有意义的前缀可以同时区分变量显示其范围,例如m_(成员),s_(静态),p_(参数),使公共属性和局部变量保持简单,不带前缀和不必担心区分大小写。如果由于某种原因,您必须将本地名称与属性相同而不考虑大小写,则只需在属性前加上“this”。

局部变量参数之间的命名冲突不会发生,因为它们不能被命名为相同的东西(编译器将捕获重复的定义)。 会员变量属性也是如此。分别以“p_”和“m_”为前缀的参数和成员不会发生冲突,并且可以通过添加“this”来解决非前缀本地和属性之间的冲突。属性。

我的建议的替代方案并不漂亮:用例敏感(不好主意,因为并非所有CLR语言都区分大小写),自己使用下划线(也很糟糕,因为它可能会与标准发生冲突并且不会告诉您该死的东西),或者完全使用不同的名字(可能很费时,很难,而且显得随意)。

答案 4 :(得分:0)

为什么不为您的私有成员变量添加下划线或单个字母前缀。 如果您不喜欢这个想法,那么您在第二个代码块中所做的就是好的。

答案 5 :(得分:0)

将X放在你的参数上是不好的。构造函数是您的类的公共接口的一部分,它只会混淆您的类的用户。有些人喜欢在成员变量前面加上下划线,因为它只对你的类的实现者可见。否则,在第二个例子中使用它就足够了。

答案 6 :(得分:0)

私人会员

m_foo 公共财产Foo foo用于参数和局部变量。

我更喜欢将块范围与扩展范围成员区分开来,这就是我坚持使用前缀的原因。

答案 7 :(得分:-1)

您需要以某种方式将它们分开。使用'this。'是一种弱的匈牙利符号形式,所以你不妨咬紧牙关并使用下划线或'm_'。

我也觉得'这个'。实际情况更糟,因为在极端情况下(即大方法),'这可能'。将被关闭,将引用错误的变量。我知道大型方法很糟糕,但它们确实会在实际业务应用程序中自然发生,而且开发人员技能各异使用私有字段的前缀将阻止该情况。

很有可能认为下划线可能会像“这个”一样被遗忘。将。但这是不正确的,因为下划线会更改变量的名称,因此唯一可能遗忘的地方是定义,而不是文件中的使用。而与'这个'。如果在使用过程中忘记它,则前缀没有编译器错误。

无论你选择什么,在这种情况下都不会避免匈牙利人使用'this'。或下划线。无论如何,它并没有那么糟糕,我们被迫使用匈牙利语来使用接口名称,控制名称以及其他我现在想不到的地方。