C#中的命名约定 - 强调

nav*_*een 30 c# naming-conventions

我在http://www.asp.net的MVC3 Razor教程中看到了这一点

public ActionResult Index() {

    return View(_usrs._usrList);

}
Run Code Online (Sandbox Code Playgroud)

这种用法不是很明显吗?我一直以为[docs]

在C#中,我通常看到它仅在为公共属性定义底层私有成员变量时使用.其他私有成员变量没有下划线.尽管如此,随着自动属性的出现,这种用法已基本消失.

或者这是我看到的新命名约定?对微软自己的教程中的用法非常好奇.

PS:文章非常好.只是我倾向于遵循命名约定以提高可读性.

Phi*_*hil 38

StyleCop上有一篇关于C#样式指南开发的好文章.

.NET的原始指导是永远不要使用下划线,除非它们是私有成员变量的一部分,然后仅作为前缀,例如_customerId.这可能是从MFC继承而来的,其中'm_'被用作成员变量的前缀.

目前的做法是根本不使用下划线.私有成员变量和具有相同名称的参数之间的消歧应该使用'this.'来完成.实际上,所有对私有成员的引用都应以"this"为前缀.

似乎使用了下划线的唯一地方是单元测试方法.我不是粉丝,但它可能会使方法更具可读性Throw_If_Customer_Is_Null(){...}.

  • 我仍然不能让自己转而使用'this'.它只是感觉不对:-) (32认同)
  • 使用"this"作为隐私的指标是一个多余的眼睛. (4认同)
  • `私有成员变量和具有相同名称的参数之间的消歧应该使用'this.'来完成 - 如果你使用`this`来引用C#类中方法中的成员字段,Resharper会发出警告.它建议删除`this`限定符作为此类源代码的潜在修复.我正在使用Resharper 2016 Ultimate. (3认同)
  • 这是Microsoft的指南,准确给出,但是请注意,此建议会使`SomeProperty`的支持字段为`someProperty`,如果您随后在属性定义中不小心键入`get {return SomeProperty}`,则会得到`StackOverflowException`。每次被调用 我并不为这种命名方案总能使我远离运行时错误/崩溃而错字。同样值得一提的是[.NET框架本身](https://referencesource.microsoft.com/#System/net/System/Net/Sockets/TCPClient.cs,21)似乎更喜欢使用m_而不是他们的官方指导。 (2认同)
  • @RBT-这是可配置的设置 (2认同)
  • 更新:[“指南不涵盖内部和私有字段”](https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members);所以“当前的做法是根本不使用下划线”中的“当前的做法”。不参考任何当前的 Microsoft 指南,尽管 IIRC 曾经有一个官方指南这样说。我建议更新此答案以使其更清楚。 (2认同)
  • 所以 `this.` 是模棱两可的,没有添加额外的信息?但是下划线呢?好吧,`this.` 更好,因为在编译器的帮助下肯定消除了歧义。呃 (2认同)

use*_*117 14

这些指南在http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx中进行了总结, 并包含了使用"this"的规定.而不是下划线.但是我发现用"this."来代我的代码会使代码变得更加冗长,混乱和难以理解.此外,它似乎不像下划线那么频繁,因此作为惯例,"_"似乎更为传统.

  • 在新文档中:[“指南不涵盖内部和私有字段”](https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members)。 (3认同)