C# 为什么不应该';我不能给字段加前缀吗? 我从来都不是匈牙利符号的爱好者,除非你做了一些低水平的编程,我总是觉得它没用,但是在每一个C++项目中,我都在执行某种匈牙利符号法,并且用一些“非匈牙利”前缀作为字段的My.g_u表示全局等

C# 为什么不应该';我不能给字段加前缀吗? 我从来都不是匈牙利符号的爱好者,除非你做了一些低水平的编程,我总是觉得它没用,但是在每一个C++项目中,我都在执行某种匈牙利符号法,并且用一些“非匈牙利”前缀作为字段的My.g_u表示全局等,c#,field,naming-conventions,hungarian-notation,C#,Field,Naming Conventions,Hungarian Notation,很快我意识到这在C#中是多么无用,并逐渐开始放弃我所有的旧习惯。。。但是“m__”的事情。我仍然在私有字段上使用m_u前缀,因为我发现能够区分参数、局部变量和字段非常有用 报告说我不应该,但没有说明原因(例如,谷歌的惯例通常倾向于合理化他们的处方) 有没有理由我不应该这样做,或者这只是一个风格问题。如果是后者,前缀通常被认为是一种糟糕的风格,我能期待其他从事代码库工作的人的负面反应吗?当您应该: 当你的项目编码指南说你应该 当你不应该: 当你的项目编码指南说你不应该 如果你还没有任何指导

很快我意识到这在C#中是多么无用,并逐渐开始放弃我所有的旧习惯。。。但是“m__”的事情。我仍然在私有字段上使用m_u前缀,因为我发现能够区分参数、局部变量和字段非常有用

报告说我不应该,但没有说明原因(例如,谷歌的惯例通常倾向于合理化他们的处方)

有没有理由我不应该这样做,或者这只是一个风格问题。如果是后者,前缀通常被认为是一种糟糕的风格,我能期待其他从事代码库工作的人的负面反应吗?

当您应该:

  • 当你的项目编码指南说你应该
当你不应该:

  • 当你的项目编码指南说你不应该
如果你还没有任何指导方针,你可以自由选择你或你的团队想要的并且感觉最舒服的东西。就个人来说,在编码C++时,我倾向于使用 My成员,这确实有帮助。当用其他语言编写代码时,特别是那些没有真正类的语言(比如Javascript、Lua),我不会


简而言之,我不相信有“对”和“错”两种方式。

我总是用m作为成员变量的前缀,用s作为静态变量的前缀,原因与您陈述的相同。有些人在成员变量前面加下划线,但我总是觉得这看起来有点奇怪(但这只是个人偏好)

与我共事的大多数人都使用m_u/s_u前缀。我真的不认为你使用什么太重要,只要你是一致的。

我试着遵循规则。它们包括一个部分


显然,这些都是项目指南的次要部分。

C#3.0中自动实现的属性特性以某种方式减少了对该约定的需求。而不是写作

string m_name;
public string Name { get { return m_name; } }

(或任何其他约定),您现在可以编写

public string Name { get; private set; }
因为您不再需要显式的backingstore变量,所以您不再需要为它命名;从而避免了整个讨论


显然,当您确实需要显式支持存储(如执行验证)时,此参数不适用。

我从不使用它们。它鼓励草率的编码。
MSDN编码指南,就是它的所在。

我习惯的是,私有财产的f.ex“string\u name”值很小。公众的名字是“名字”。方法中的输入变量使用小写字母“void MyMethod(string name)”


如果你有静态常数,它通常是用大号字母写的<代码>静态const Myconst =“HMPF” ./P>< P> C++和C语言之间有一个重要的区别:工具支持。当你遵循既定的指导方针(或共同的变化),你将得到一个深层次的工具支持,C++从未有过。遵循这些标准,工具可以执行比其他方法更深入的重构/重命名操作。Resharper就是这样做的。因此,请坚持其中一个既定标准。

我更喜欢用下划线而不是“m”标记属性支持字段(尽管如前所述,.NET 3.0+通过自动属性减少了需要)。首先,当我开始使用它们时,它将它们放在智能感知列表的首位


我承认我需要温习一下MSDN的指导原则,这些天事情变化太快了。

每当我有选择的时候,我从不使用任何匈牙利疣。这是额外的输入,不能传达任何有意义的信息。任何好的IDE(我根据此功能的存在定义为“好”)都允许您对静态成员、实例成员、成员函数、类型等有不同的语法高亮显示。没有理由用IDE提供的信息来混乱代码。这是避免用注释掉的旧代码弄乱代码的必然结果,因为版本控制系统应该负责这些事情。

使用诸如resharper之类的工具,确实没有理由使用前缀。此外,如果您编写简短的方法,您应该能够非常快速地知道var来自何处。最后,我想我真的看不出有必要区分静态和非静态,因为如果你尝试做一些你不能做的事情,resharper会再次把它画成红线。即使没有resharper,您也可能被编译器保存。

我喜欢成员字段的下划线前缀。大多数情况下,我喜欢它,因为这样,在屏幕顶部的向导栏中,我的所有成员字段都按字母顺序显示在我的方法之前


正如一些人所提到的,MS指南说:

不要对字段名使用前缀。 例如,不要使用g_u或s_u来 区分静态与非静态 田地


我恰好同意这一点。前缀会使代码看起来很难看,并用无关紧要的字符浪费空间。话虽如此,通常使用字段来支持字段和属性都具有相同名称的属性(私有字段为camel case,属性为pascal case)。在VB中,这不起作用,因为VB不区分大小写。在这种情况下,我建议使用单个前缀。不多也不少。它看起来更干净,IMHO。

最好的办法是与同事商定一个标准,并坚持下去。它不一定是对每个人都最有效的方法,只是同意一种方法比你实际同意哪种方法更重要

我们选择的代码标准是
public string Name { get; private set; }
int foo;
public int Foo
{
  get { return foo; }
}