为啥在 C# 中生成的代码使用下划线? [关闭]
Posted
技术标签:
【中文标题】为啥在 C# 中生成的代码使用下划线? [关闭]【英文标题】:Why generated code in C# uses underscore? [closed]为什么在 C# 中生成的代码使用下划线? [关闭] 【发布时间】:2012-06-24 22:52:12 【问题描述】:我知道这可能是一个愚蠢的问题,但它就是这样。
我总是写我的私人成员,比如privateMember
,并且我一直在阅读很多关于 C# 中命名约定的内容,因为我注意到 Visual Studio 中的许多自动生成的代码都将 _variableName
用于私人成员。我在任何地方读到,甚至在 Microsoft 文档中,你都应该使用 privateMember
。
所以,我的问题是,如果好的做法说我应该写 privateMember
,就像我现在所做的那样,为什么 Visual Studio 会使用下划线 (_privateMember
) 生成具有私有成员的类?
【问题讨论】:
顺便说一句,使用下划线作为成员变量前缀的一个原因是它们出现在智能感知列表的顶部。我个人讨厌它,因为键盘拉伸以获得下划线字符真的很尴尬。 【参考方案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。这真的是个人喜好。我不会使用生成的代码作为我的编码约定标准的灵感。
请勿使用下划线、连字符或任何其他非字母数字字符。
可能是因为它是生成的代码,而不是供人类阅读的。 ;-)
【讨论】:
感谢您找到此参考资料。我同意除了下划线之外的所有内容,对我来说,如果所有私有字段都带有下划线前缀,则更容易扫描一个类。 以上链接指的是公开的 API(参见 docs.microsoft.com/en-us/dotnet/standard/design-guidelines/…) - 不是private
。【参考方案6】:
开头的下划线是VS表示它是privateMember的方式。我们通常在开头保留下划线,但对于您使用的命名约定,这确实是个人喜好。只需选择一个并坚持下去,这样您就不会混淆自己或其他可能会查看您的代码的人。
【讨论】:
【参考方案7】:不久前,当 C# 推向市场时,有一个概念,即局部变量应该由前缀 _
引导。这个概念没有被社区接受,因为在纯 C 中,_
引导系统变量/函数,元数据由__
引导。所以几年后,他们现在不鼓励使用它。但是你仍然会发现一些信徒使用这个符号并不是因为它是***的,而是很多旧的 C# 应用程序都包含这个约定。
为什么这是在 VisualStudio 中?
这可能与它设计的时间间隔有关。在那个时候,这种方法是由语言设计者提出的。所以很可能没有人在最新版本的配置中改变这一点。
【讨论】:
以上是关于为啥在 C# 中生成的代码使用下划线? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 应用程序中生成的批处理文件解锁 BitLocker 驱动器
使用 Selenium 在页面的 onload() 中生成的 JavaScript 警报的解决方法是啥?