重要更新(2016年4月12日):
引起我们注意的是.NET CoreFX团队的内部标准坚持使用下划线符号,而未给出任何原因的见解。但是,如果我们在规则#3密切关注它变得明显,有制度_,t_,s_那建议前缀为什么_选择摆在首位。
- 我们
_camelCase用于内部和私有字段,并在可能的情况下使用只读。带有的实例字段前缀,带有的_静态字段前缀s_和带的线程静态字段前缀t_。在静态字段上使用时,readonly应紧随其后static(即static readonly不是readonly static)。
this.除非绝对必要,否则我们将避免。
因此,如果您就像.NET CoreFX团队一样在处理一些性能关键的多线程系统级代码,那么强烈建议您:
- 遵守他们的编码标准
- 使用下划线符号和
- 不要再看这个答案了
否则请继续阅读...
原始答案:
首先让我们就我们在说什么达成一致。问题是,如果可见性修改器允许,我们如何从非静态方法和类/子类的构造函数中访问实例成员。
下划线符号
- 建议您在专用字段名称中使用“ _”前缀
- 它还说除非绝对必要,否则不要使用“ this”
这个符号
为什么存在这个符号?
因为你就是这样
- 当它们共享相同的名称时,从字段中区分出一个参数
- 确保您正在当前实例的上下文中工作
例
public class Demo
{
private String name;
public Demo(String name) {
this.name = name;
}
}
为什么下划线符号存在?
有些人不喜欢键入“ this”,但是他们仍然需要一种区分字段和参数的方法,因此他们同意在字段前面使用“ _”
例
public class Demo
{
private String _name;
public Demo(String name) {
_name = name;
}
}
有人可能认为这只是个人品味的问题,两种方法的优劣都同样。但是,在某些方面,该符号要优于下划线符号:
明晰
认知负荷
更新:如前所述,以下内容不是优势
保养
自动补全
当您需要查看实例成员的列表时:
- 下划线符号没有太大帮助,因为当您键入“ _”时,自动完成弹出窗口会向您显示私有字段和链接程序集中的所有可用类型以及其余实例成员
- 通过输入“ this”,此符号可为您提供清晰的答案,您所看到的只是成员列表,仅此而已
歧义性
有时,您必须在没有Intellisense的帮助下处理代码。例如,当您进行代码审查或在线浏览源代码时。
下划线符号不明确:当您看到Something.SomethingElse时,您无法分辨Something是一个类,而SomethingElse是其静态属性...还是Something是当前实例属性,该属性具有自己的SomethingElse属性
这个表示法很明确:当您看到Something.SomethingElse时,它只能表示具有静态属性的类,并且当您看到此内容时。Something.SomethingElse您知道Something是成员,而SomethingElse是其属性
扩展方式
如果不使用“ this”,则不能在实例本身上使用扩展方法。
- 下划线符号要求您不要使用“ this”,但是对于扩展方法,您必须
- 此表示法使您免于犹豫,您始终使用“ this”(句号)。
Visual Studio支持
- 下划线符号在Visual Studio中没有内置支持
Visual Studio自然支持此符号:
- “这个。” 资格:优先使用非静态方法中使用的所有非静态字段
this.作为C#的开头
官方建议
有很多官方准则明确指出“请勿使用下划线”,尤其是在C#中