【问题标题】:To Use or Not To Use the 'this' qualifier in C# [duplicate]在 C# 中使用或不使用“this”限定符 [重复]
【发布时间】:2011-08-18 14:52:58
【问题描述】:

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

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

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

我一直喜欢对属于当前类的属性使用“this”限定符(即 this.Name)。没有真正的原因 - 我似乎在很多个月前就采用了这个。

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

你怎么看?

【问题讨论】:

标签: c# .net resharper this


【解决方案1】:

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

public class thing
{

   private string name;

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

}

如果你已经在某个类的上下文中工作,记住这一点并不难,而且我不需要提醒我每次寻址一个局部变量时都是在寻址一个局部变量。

所以我认为 ReSharper 在这一点上是正确的。

【讨论】:

    【解决方案2】:

    要记住的重要事情之一是this 已被编译器删除,因此这纯粹是“什么对您和与您共享代码的人看起来不错?”的问题。它会影响性能而不是丝毫。

    【讨论】:

    • 谢谢 - 这是我主要关心的问题 - 我对做某事的偏好是否没有针对性能进行优化。
    【解决方案3】:

    我发现它是多余的,尤其是对于定义明确的编码标准:

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

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

    【讨论】:

    • 这仍然没有解决基础。限定符功能。
    【解决方案4】:

    我个人认为使用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!
    

    打字也快得多。

    【讨论】:

    • 我同意 _fieldName 作为私人。这是其他语言(如 python)中的一个已知约定。
    【解决方案5】:

    使用它的一个优点。是智能感知。它缩小了您可以更快选择的内容的范围。

    【讨论】:

    • 你可以通过按 CTRL + SPACE 来使用 Intellisens 而不用这个
    • @oleksii:我不知道 - 每天都能学到新东西!
    • 任何时候,还有CTRL + SHIFT + SPACE,我不记得有什么区别
    • 如果这就是你使用“this”的原因,我会说你的类型可能有太多的责任。
    【解决方案6】:

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

    我知道,很多人不知道,所以我想这取决于个人喜好或您雇主的编码标准。

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-10
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 2010-10-25
        • 2017-05-29
        • 2017-04-27
        相关资源
        最近更新 更多