我知道关于私有字段/属性使用this
关键字或下划线存在争议/意见(我会提到,我坚持使用.NET 2.0)
就个人而言,我更喜欢this
,但有时候你不能使用它,例如当你需要从静态方法中引用一个全局变量时。那么,我们被迫使用下划线(假设我们只有2个选项,this
或下划线)。这意味着如果我的类使用任何静态方法,我不能在整个文档中使用this
。
现在,我已经阅读了naming guidelines并使用了StyleCop,我宁愿不使用下划线,但我的Resharper非常坚持使用_。
我认为让一个类使用_并且下一个类使用this
只是为了适应类混合非静态和静态方法时是不对的!关于SO的建议是保持一个实现/风格,但我不知道这是否意味着我应该忽略微软(我知道MS并不总是遵循他们自己的规则)!
有人建议用其他东西作为前缀,类似于匈牙利语,但前缀为globVariableName,其中glob表示全局。我讨厌这个想法,它太定制了,对我团队以外的任何其他开发者都不会很明显。
所以,我的问题是,一致定义全局变量的最佳方法是什么?因为它们是命名指南,所以我可以忽略(至少_可以一致地使用,但忽略语言创建者的建议感觉不对)。
答案 0 :(得分:2)
只需在静态类中使用类名,就像使用“this”一样。示例如下:
public static class MyStatic
{
public static object Global;
public static void SomeMethod()
{
var theGlobal = MyStatic.Global;
}
}
public class MyNonStatic
{
public object Global;
public void SomeMethod()
{
var theGlobal = this.Global;
}
}
注意:我实际上无法想到任何其他方法。
答案 1 :(得分:1)
根据全局变量,我认为您的意思是const
或static
字段
我认为StyleCop用于鼓励您使用ClassName.staticField
用于static
和const
字段,但它似乎已经删除了该规则,至少在默认情况下如此。尽管如此,这仍然是一种很好的方式。
此外,您可以将Resharper配置为与StyleCop很好地配合。
答案 2 :(得分:0)
这只是我个人的意见;
我认为对每个私有变量使用this
非常有用;它对代码的可读性有积极影响。此外,当您使用一些DI构造函数注入方法时,它使您可以使用相同的变量而不会产生任何混淆,这看起来非常合适。
public void SomeMethod(int someVariable)
{
this.someVariable = someVariable;
}
我更喜欢this
而不是下划线;下划线看起来很乍看;但是参考前面的例子,它对可读性有负面影响。
我命名静态变量的方式与命名类变量的方式相同; this
关键字的使用降低了私有和静态变量之间混淆的风险。
答案 3 :(得分:0)
我总是对静态变量和实例变量使用下划线。
例如,我使用this.variable
对于static
变量i,有时会在其前面加上类的名称,例如ClassName.variable