已阅读MSDN naming guidelines并找不到明确的答案,除此之外,您应该尽量避免使用下划线。假设我有以下内容:
public class Employee
{
private string m_name; //to store property value called Name
public string Name
{
get { return m_name; }
set { m_name = value; }
}
public void ConvertNameToUpper()
{
//by convention should you use this
return m_name.ToUpper();
//or this
return Name.ToUpper();
}
}
上面m_name的正确命名约定是什么?例如,在我继承的代码中我经常看到:
哪一个(或另一个)最常被接受?
作为后续行动,在课程方法中,您是指内部(私人)标识符还是公共属性访问者?
答案 0 :(得分:14)
我认为,无论你使用什么命名约定,最重要的是你保持一致。 我的意思是,如果你选择像_name一样命名私有成员,那么总是这样做,而不是一次使用_name,另一次是m_name。 我个人使用下划线前缀约定。 (其中一个原因是因为我使用NHibernate,而NHibernate有一个'field.camelcase-underscore'访问策略。
对于您的其他问题: 这取决于你想做什么 您的属性是否包含额外的逻辑,并且您是否希望在引用它时执行此逻辑?然后使用该属性。你不想执行逻辑?使用该字段。 Eric Lippert在他的博客上写了一篇post。
对于你的后续行动:这一切都取决于具体情况。 如果您的属性包含一些额外的逻辑,并且您不想在从类中访问时执行该附加逻辑,那么请使用支持字段...
答案 1 :(得分:5)
首先 - 对于简单的get / set情况,我建议您使用自动实现的属性。如果这样做,编译器将生成基础变量,并且您只引用属性本身。
除此之外,我建议您选择上述之一或类似内容,并坚持下去。我工作的公司使用vName,其中“v”表示这是属性的值。
答案 2 :(得分:4)
我使用Style Cop在代码上强制执行某些样式。我发现这非常有用,我的所有团队成员也都使用它。
虽然围绕使用Style Cop进行了很多讨论,但有一点我建议如果你使用Style Cop来启用所有样式。这样,当您在用户之间共享时,它会使事情变得更加容易。
这种情况的一个原因是您不能使用下划线命名您的私有字段。因此,我通常在编写私有字段时使用camelCase,然后在公共属性中使用PascalCase:
private string name;
public string Name
{
get { return this.name; }
set { this.name = value; }
}
Style Cop还强制使用this.
,这使得阅读更容易。
答案 3 :(得分:3)
我在示例代码中看到的最常见的是一个简单的_前缀。
然而,真正重要的是团队同意标准是什么并坚持下去。
答案 4 :(得分:2)
如果您不能使用Brian Rasmussen建议的自动实现的属性,并且您必须拥有私有成员,那么我会建议使用下划线前缀_name。
在intellisense中,项目是参数,本地会员还是私人会员并不是很明显,因为它们都具有相同的符号(蓝色立方体)。但是,如果将光标移动到特定项目,则工具提示会告诉您它们中的哪一个。
我发现下划线前缀是一个方便的视觉辅助工具,这使得它显然是一个私人成员,而不必移动光标。
答案 5 :(得分:1)
我曾经非常反对'_'前缀,但是当你想快速访问一个成员字段而不必输入很多字母时,它对intellisense非常有用。
答案 6 :(得分:0)
一方面,我同意你应该使用公司标准,另一方面我会努力遵守行业标准。
答案 7 :(得分:0)
我会回答以前的答案,因为你应该坚持使用你的团队使用的方案,或者如果你不在团队中,那么你应该使用你所使用的任何方案。
就个人而言,我使用下划线前缀,因为我发现它给了我一个很好的视觉提示。
答案 8 :(得分:0)
我认为普遍接受的命名约定只是为了使名称有意义(并且代码干净简单)。在我看来,如果我的代码中的标识符因任何原因需要视觉提示,那么它太复杂了,名称通常也不完全准确。
我已经研究过需要手动读取的代码......“m”表示类级别,“p”表示参数等。命名约定是为了使代码更易于阅读但结束而开发的正好相反,因为开发人员认为“好的”命名约定意味着可读的代码。
请确保此Dennis Green(前亚利桑那红衣主教练)引用适用于您的标识符:“他们是我们认为的人!”
答案 9 :(得分:0)
我尝试仅在必要时访问成员变量,例如当属性为只读或我想绕过任何设置逻辑时。
这样做的一个原因是,如果您稍后向设置者添加逻辑,您很可能希望它在任何地方都可以使用。
答案 10 :(得分:0)
对于类级变量,我们的编码标准说使用mVariableName或m_VariableName。主要是跟随你的公司/老师/等。编码标准/实践。
我个人,只有通过getter / setter才能访问变量。即使变量仅在类内部使用,我也使用自动属性。这样,我添加了一层抽象,这意味着如果我改变了某些东西,重构的代码就会减少。
BTW,你的void函数不能返回一个字符串.....: - )
答案 11 :(得分:0)
我只是想补充一点,MSDN命名指南没有指定这个,因为它只有公共接口的指南(即属性名称,公共方法,公共方法参数等等)。他们不关心私人会员风格,因此就微软而言,你可以使用你和你的团队想要的任何东西。
答案 12 :(得分:0)
首先,我和我合作的许多其他人已经废除了使用“m_”为私有成员添加前缀。接下来,每当我引用类中的私有成员时,我通常会使用“this.privateMemberVariableName”中的单词this。使用它足以区分变量不是局部变量或作为方法中的参数传递的变量。
我确实引用了公共属性名称,如果它包含的逻辑不仅仅是引用私有成员变量,例如实例化连接或在视图状态中保存属性值。
答案 13 :(得分:0)
framework Design guidelines book表示你不应该在变量前面添加_ - 你应该只用一个小写的变量名称,而Code Complete第二版我认为你不应该在你的变量前面加上前缀与m _。