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

时间:2011-05-04 14:43:16

标签: c# .net resharper this

  

可能重复:
  When do you use the “this” keyword?

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

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

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

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

您怎么看?

7 个答案:

答案 0 :(得分:13)

最好,我只使用this来防止(可能)属性和函数参数之间存在歧义

public class thing
{

   private string name;

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

}

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

所以我觉得resharper在这个问题上是正确的。

答案 1 :(得分:12)

要记住的重要事项之一是编译器删除了this,所以这纯粹是“对你和那些与你共享代码的人有什么好处?”。它会影响性能而不是影响。

答案 2 :(得分:11)

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

Name // Property
_name // Member field
name // local variable

使用this.<whatever>似乎更有效。

答案 3 :(得分:7)

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

/// some pretty long method
/// ...
frameCount += 1; // is it private memeber or some local defined above?

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

但是我发现this的持续使用会使代码看起来“吵”,this是无用的干扰器。 IMO最好为私人成员使用特殊的_前缀命名:

/// some pretty long method
/// ...
_frameCount += 1; // it's clearly private memeber!
输入它也快得多。

答案 4 :(得分:6)

使用此功能的一个优点。是intellisense。它缩小了你可以选择的东西列表。

答案 5 :(得分:2)

技术上是多余的,但StyleCop(如果您挑剔并使用全套Microsoft编码标准)表示您应该使用它。

我知道,很多人都没有,所以我想这取决于个人偏好或雇主的编码标准。

答案 6 :(得分:1)

在这种情况下它是一个偏好 - 所以你更喜欢使用它,告诉resharper,它会停止抱怨。