自从我发现汽车属性以来,我试着到处使用它们。以前我会在课堂上使用的每个属性都会有一个私人成员。现在这被auto属性所取代。我通常使用普通成员字段的方式在我的类中使用该属性。问题是该属性以国会大厦开始,这使得在以这种方式使用它时看起来有点奇怪。我之前并不介意属性从国会大厦开始,因为它们总是落后于“点”。现在我发现自己在this.
内部使用了我在内部使用的所有属性,以减轻我的感觉。
我的困境是,在我总是有点反对使用this.
的内部成员的所有用法前缀,除非“必要”(如在setter或构造函数中)。所以我有点想找到第二个意见。有没有一个标准的好方法来做到这一点?我应该停止抱怨(我倾向于成为“蚂蚁驼背”(荷兰语表达))?
在:
class Foo
{
private Bar bar;
public Bar Bar { get { return bar; } }
public Foo(Bar bar)
{
this.bar = bar;
}
public void DoStuff()
{
if(bar != null)
{
bar.DoMethod();
}
}
}
后:
class Foo
{
public Bar Bar {get; private set;}
public Foo(Bar bar)
{
this.Bar = bar;
// or
Bar = bar;
}
public void DoStuff()
{
if(this.Bar != null)
{
this.Bar.DoMethod();
}
// or
if(Bar != null)
{
Bar.DoMethod();
}
}
}
似乎意见各不相同,尽管更多人赞成使用this.
添加前缀。在自动属性之前,我总是反对用this.
作为前缀,而不是在构造函数和setter中(如前所述)。但现在我不知道了。
附加说明:将属性命名为与类(public Bar Bar { get; private set; }
)相同的常见事实也使我倾向于使用前缀。每次我输入Bar.DoMethod()
,我觉得它看起来像一个静态的方法。即使VS是Bar
,如果它是静态方法,并且您不能使用具有相同签名的静态和实例方法。当它被着色时,很明显它是一种静态方法,但是当它没有着色时,它不是100%清楚它不是静态方法。例如,您可能只是缺少using
语句,但也只是因为我不习惯将未被着色的链接与是否是静态调用相关联。在成员的情况下通过首字母大写或在属性的情况下通过“点”立即看到它(例如foo
中(Foo)foo.Bar.DoMethod()
之后的“点”)。
(目前很难选择“接受的答案”)
答案 0 :(得分:6)
是的,有一种“标准方法”:大写字母和这个前缀被认为是良好的编码习惯。如果您使用某种工具来测试代码以获取ReSharper或Microsoft自己的StyleCop等编码指南,则会在不使用this-reference时向您发出警告,或者如果您没有使用资本。
您的属性是公开可见的。任何公共财产,领域或方法都应以资本开头。
您在自己的类中调用的属于该类的任何属性,字段或方法都应该以this-reference为前缀,以便于阅读。
更新:当然,意见各不相同。我喜欢点击this.
,然后在点之后只看到成员,而不是在没有任何前缀的情况下点击ctrl-space时看到所有关键字。这对我有帮助。但是,最后(quote from here):
无论您的意见如何,重要的是 事情是所有人都密切关注 在项目上合作使用 相同的格式标准, 不管那些标准是什么 是 强>
更多参考文献:
Microsoft on using a capital letter几乎任何名称和财产中都有。{
更多guidelines here。
答案 1 :(得分:6)
我强烈建议尽可能使用' this。'。 Framework Design Guidelines 推荐这种做法。它让您从可读性的角度了解范围,并帮助您避免编译器在编译时报告的愚蠢错误。
答案 2 :(得分:2)
我强烈建议使用 never ,因为它只会降低清晰度。如果您确实发现自己处于需要避免冲突的实例中,我建议您重命名其中一个字段/属性/变量。
我觉得唯一可以接受的地方是,它是公开暴露的API的一部分,重命名会导致重大变化。
答案 3 :(得分:1)
在第一个示例中,来自实例的bar
参数词法阴影bar
字段。因此,您必须使用this
来消除歧义。
在第二个例子中,你没有这种歧义,因此不需要消除歧义(即this
)。然而,如果那是你的一杯茶,你仍然可以作为前缀。 :)