【问题描述】:

我知道这可能是一个愚蠢的问题,但它就是这样。 我总是写我的私人成员,比如 privateMember 我一直在阅读很多关于 C# 命名约定的内容,因为我注意到 Visual Studio 中的很多自动生成的代码都使用 _variableName 私人会员。在我读到的所有地方,甚至在 Microsoft 文档中,你都应该使用 privateMember。 所以,我的问题是,如果良好做法说我应该像现在一样编写 privateMember,为什么 Visual Studio 会使用下划线 (_privateMember )?

【问题讨论】:

  • 顺便说一句,在成员变量前加下划线的一个原因是它们出现在智能感知列表的顶部。我个人讨厌它,因为键盘拉伸以获得下划线字符真的很尴尬。

标签: c# private members


【解答1】:

这只是 C# 语言约定,因此在构造函数中,当构造函数和字段名称相同时,您可以使用 _varable 而不是 this.variable。

里面有所有的c#命名约定 http://msdn.microsoft.com/en-us/library/ms229002.aspx

如果您遵循生成代码的约定,那您就放心了。 除了建议之外,许多程序员使用与生成代码相同的约定。 一些帮助您重构代码的程序还建议您遵循字段名称的命名约定。

【问题讨论】:

  • 请阅读整个问题,而不仅仅是主题。
  • 我做到了,我刚刚完成了我的答案,然后
  • 所以你不明白。在您的回答中,与问题有关的 Visial Studio 和生成的代码无关。
【解答2】:

这只是他们使用的惯例,我也这样做。您最终可以随意命名您的私有字段。用下划线作为前缀只会让 IMO 更容易阅读。

【问题讨论】:

  • 请阅读整个问题,而不仅仅是主题。
  • @Vash 这是一个很大的假设,我确实阅读了这个问题。我只是理解 why 的含义与您所做的不同。你有公认的答案,你赢了。
【解答3】:

命名约定并非 100% 达成一致。这是有些人喜欢,有些人无所谓,有些人讨厌的其中之一。某些人认为通过他们的名字来突出实例变量会更好,这是一种方法。其他人一直使用 this.instanceVariable 而不是 instanceVariable 以使实例变量脱颖而出,其他人在前面加上 '_' 字符以外的东西,有些人只是不要特意使用任何特殊的区别。

归根结底,重要的是您和您团队的其他成员就一个标准达成一致并与之保持一致。世界其他地方选择做什么不需要影响你。

还值得一提的是,Visual Studio 生成的代码 sn-ps 在大多数情况下都可以配置为符合您团队的编码实践。

【问题讨论】:

    【解答4】:

    作为惯例,私有字段被/被用作下划线,例如字符串_name;

    该链接将为您提供有关 MS http://msdn.microsoft.com/en-us/library/ms229045.aspx 命名约定指南的更多信息

    【问题讨论】:

    • 具有讽刺意味的是,该链接实际上推荐反对它。
    • 更正它确实建议反对它,因此我说私有字段与下划线一起使用并为您复制了链接
    【解答5】:

    Microsoft Code Conventions actually recommend against using underscores altogether。这真的是个人喜好。我不会使用生成的代码作为我的编码约定标准的灵感。

    <1234565>

    请勿使用下划线、连字符或任何其他非字母数字字符。

    可能是因为它是生成的代码,而不是供人类阅读的。 ;-)

    【问题讨论】:

    【解答6】:

    开头的下划线是VS表示它是privateMember的方式。我们通常在开头保留下划线,但对于您使用的命名约定,这确实是个人喜好。只需选择一个并坚持下去,这样您就不会混淆自己或其他可能会查看您的代码的人。

    【问题讨论】:

      【解答7】:

      不久前,当 C# 推向市场时,有一个概念,即局部变量应该由前缀 _ 引导。这个概念没有被社区接受,因为在纯 C 中,_ 引导系统变量/函数,而元数据由 __ 引导。所以几年后,他们现在不鼓励使用它。但是你仍然会发现一些信徒使用这个符号并不是因为它是狂热的,而是很多旧的 C# 应用程序都包含这个约定。

      为什么这是在 VisualStudio 中?

      这可能与它设计的时间间隔有关。在那个时候,这种方法是由语言设计者提出的。所以很可能没有人在最新版本的配置中改变这一点。

      【问题讨论】: