在C#中使用或不使用'this'限定符

Eza*_*ade 11 .net c# resharper this

可能重复:
您何时使用"this"关键字?

我刚刚开始使用Resharper来分析我的代码,它有很多建议我做的事情,我对它的输出非常满意,因为它也教会了我一些更好的做法.

显然,它的建议可以被忽略,其中一个我想从社区获得一些反馈!

我总是倾向于将'this'限定符用于属于当前类的属性(即this.Name).没有真正的理由 - 我似乎只是采用了这么多个月.

Resharper建议这是多余的,也许我应该删除它.

你怎么看?

Tim*_*ote 16

优选地,我this仅用于防止(可能)属性和函数参数之间的歧义

public class thing
{

   private string name;

   public thing(string name)
   {
       this.name = name; // will set private string name to param string name
   }

}
Run Code Online (Sandbox Code Playgroud)

如果您已经在某个类的上下文中工作,那么记住这一点并不困难,我不需要提醒我每次处理一个本地变量时都会解决这个问题.

所以我认为resharper在这一方面是正确的.


Cos*_*lis 13

要记住的重要事项之一this是编译器删除了它,因此它纯粹是"对你和那些与你共享代码的人看起来有什么好处的问题".它会影响性能而不是影响.


Tej*_*ejs 12

我发现它多余,特别是有明确的编码标准:

Name // Property
_name // Member field
name // local variable
Run Code Online (Sandbox Code Playgroud)

使用this.<whatever>似乎更多的工作.


Pet*_*lin 8

我个人认为使用this关键字是一个很好的做法,因为它清楚地表明prorerty/method/etc是否属于对象实例.这对于私有成员的命名特别有用,这样局部变量与私有成员无法区分:

/// some pretty long method
/// ...
frameCount += 1; // is it private memeber or some local defined above?
Run Code Online (Sandbox Code Playgroud)

毋庸置疑,最好不要使用它而不是使用不一致.

但是我发现不断使用thismake代码看起来很"吵",this因为它是无用的干扰器.IMO最好_为私人成员使用特殊的前缀命名:

/// some pretty long method
/// ...
_frameCount += 1; // it's clearly private memeber!
Run Code Online (Sandbox Code Playgroud)

打字也快得多.


n8w*_*wrl 6

使用它的一个优点.是intellisense.它缩小了您可以更快地选择的内容列表.

  • 如果没有这个,你可以按CTRL + SPACE来使用Intellisens (5认同)
  • 如果这是您使用"this"的原因,我会说您的类型可能有太多责任. (3认同)