gpt4 book ai didi

c# - 总是在(自动)属性前加上 this 关键字被认为是一种好习惯吗?

转载 作者:太空狗 更新时间:2023-10-29 20:00:45 25 4
gpt4 key购买 nike

自从我发现自动属性以来,我就尝试在任何地方使用它们。之前,我拥有的每个属性都会有一个私有(private)成员,我会在类里面使用它。现在它被 auto 属性取代。我以通常使用普通成员字段的方式在我的类中使用该属性。问题在于该属性(property)以国会大厦开头,以这种方式使用它时看起来有点奇怪。我不介意以前的特性以国会大厦开头,因为它们总是在一个“点”后面。现在,我发现自己在内部使用的所有属性前都加上了 this. 前缀,以安抚我的情绪。

我的困境是,之前我总是有点反对在内部成员的所有用法前加上 this. 前缀,除非“必要”(比如在 setter 或构造函数中)。所以我有点想就此寻求第二意见。有没有标准的好方法来做到这一点?我应该停止提示吗(我有成为“ Ant 窝”(荷兰语表达)的倾向)?

之前:

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()).

(目前很难选择“接受的答案”)

最佳答案

是的,有一种“执行此操作的标准方法”:大写字母和 this-prefix 被认为是良好的编码习惯。如果您使用某种工具来测试您的代码是否符合编码准则,例如 ReSharper或者微软自己的StyleCop ,如果不使用 this-reference,或者如果你的属性没有以大写开头,它会警告你。

您的属性是公开可见的。任何公共(public)属性、字段或方法都应以大写字母开头。

您在自己的类中调用的属于该类的任何属性、字段或方法都应以 this-reference 为前缀,以便于阅读。

更新:当然,众说纷纭。我喜欢点击 this.,然后在点之后只看到成员,而不是在没有任何前缀的情况下点击 ctrl-space 时看到 all 关键字。这对我有帮助。但是,最后( quote from here ):

Whatever your opinion, the important thing is that all people closely collaborating on a project use the same formatting standards, irrespective of what those standards are.

更多引用:
Microsoft on using a capital letter几乎在任何名称中,特别是在属性中。
更多 guidelines here .

关于c# - 总是在(自动)属性前加上 this 关键字被认为是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2086125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com