Mat*_*els 7 c# this automatic-properties prefix
自从我发现汽车房产以来,我试着到处使用它们.以前我会在课堂上使用的每个属性都会有一个私人成员.现在这被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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
后:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
似乎意见各不相同,尽管更多的人赞成加上前缀this..在自动属性之前,我总是反对使用前缀this.而不是构造函数和setter(如前所述).但现在我不知道了.
附加说明:将属性命名为class(public Bar Bar { get; private set; })通常也很常见,这也使我倾向于使用前缀.每次我打字Bar.DoMethod(),我觉得它看起来像一个静态的方法.即使VS Bar是静态方法而且你不能拥有具有相同签名的静态和实例方法,它也会着色.当它被着色时,很明显它是一种静态方法,但是当它没有着色时,它不是100%清楚它不是静态方法.例如,您可能只是错过了一个using语句,但也因为我不习惯将未被着色的链接与是否是静态调用相关联.在成员的情况下通过首字母大写或在属性的情况下通过"点"立即看到它之前(例如"点"fooin (Foo)foo.Bar.DoMethod()).
(目前很难选择"接受的答案")
是的,有一种"标准方法":大写字母和这个前缀被认为是良好的编码实践.如果您使用某种工具来测试代码以获取编码指南(如ReSharper或Microsoft自己的StyleCop),则会在不使用this-reference时向您发出警告,或者如果您没有使用资本启动您的属性.
您的属性是公开可见的.任何公共财产,领域或方法都应以资本开头.
您在自己的类中调用的属于该类的任何属性,字段或方法都应该使用this-reference作为前缀,以便于阅读.
更新:当然,意见各不相同.我喜欢点击this.然后在点之后只看到成员,而不是在没有任何前缀的情况下点击ctrl-space时看到所有关键字.这对我有帮助.但是,最后(引自这里):
无论您的意见如何,重要的是所有与项目密切合作的人都使用相同的格式标准,无论这些标准是什么.
更多参考资料:
Microsoft几乎以任何名称和属性使用大写字母.这里有
更多指南.