你应该总是用“this”来引用本地类变量吗?

时间:2009-03-15 06:29:07

标签: c#

在C#中,您可以使用'this'关键字引用类中的值。

class MyClass
{
    private string foo;

    public string MyMethod()
    {
        return this.foo;
    }
}

虽然我认为答案可能是用户偏好,但最好在类中使用this关键字作为本地值吗?

8 个答案:

答案 0 :(得分:12)

本着DRY的精神,我想说这不是一般特别有用的做法。通过删除this,几乎可以将this的任何使用缩短为等效表达式。

一个例外是如果你有一个本地参数恰好与另一个类成员同名;在这种情况下,您必须使用this区分两者。但是,只需重命名参数,就可以轻松避免这种情况。

答案 1 :(得分:4)

我几乎只在某个成员隐藏另一个成员时才使用this关键字,当我需要将当前的类实例传递给方法时,例如:

class Employee
{
    private string name;
    private string address;

    // Pass the current object instance to another class:
    public decimal Salary 
    {
        get { return SalaryInfo.CalculateSalary(this); }
    }


    public Employee(string name, string address) 
    {
        // Inside this constructor, the name and address private fields
        // are hidden by the paramters...
        this.name = name;
        this.address = address;
    } 


}

答案 2 :(得分:3)

我想说这取决于您自己编码的个人偏好以及您工作代码的团队/公司编码标准。就个人而言,我试图保持个人和“专业”编码标准相同 - 它减少了混乱等。

我更喜欢在所有类级函数和变量上使用“this”。通过使用“this”,您可以立即判断该项是否是类成员。此外,我更喜欢在属于任何基类的成员上使用“base”。这没有必要,但它有助于提高可读性,特别是如果不熟悉您的代码的人正在阅读它。

答案 3 :(得分:1)

我更喜欢这种语法。随着类变大并且函数变得更复杂,能够读取变量名称并且知道它是否是实例变量而不必引用代码的另一部分是方便的。

编辑:我意识到如果一个人无法跟踪变量,那么可能是重构的时候了。这在摘要中很好。然后澄清一下:如果类及其关系不是简单(当然它们存在),或者代码中人们没有重构或遵循良好的指导方针来保持参数名称与实例变量不同,我会说(imho!)使用'this'对于清晰的代码来说并不是一个坏主意。

答案 4 :(得分:1)

我从不使用它。大多数情况下,变量是否为成员并不重要。保持你的方法足够小,以便记住哪些变量是本地人是没有问题的,并且你不会在记住哪些成员方面遇到太多麻烦。

我使用“_”作为成员变量的前缀,因为它很容易被忽略。但这意味着永远不会与本地或参数发生冲突,所以这一点。没有必要。

我的态度可能因为我使用ReSharper而变得“有色”,其“颜色标识符”模式使我更容易看到它是什么。

答案 5 :(得分:1)

你是对的 - 这是一个非常偏好的事情。当然,许多公司都会强制执行一组编码样式指南,这些指南要么在任何实例成员之前需要this,要么不要出现。 (有谁知道.NET框架的Microsoft FxCop规则是什么?)

就个人而言,我更喜欢在属于实例的任何属性,方法或字段之前出现this。这使我更容易区分它的所在:

  • 类的实例的成员(以this为前缀)
  • 一个静态类成员(我的前缀是该类的名称)
  • 本地范围变量(无前缀)

对于我来说,能够更加模糊地阅读我的代码比保存this.的5个字符更为重要。例如,我立即知道我需要dispose()在此范围内打开的所有本地范围项目,并且我不会将它们与不应该处置的实例成员混淆。哎呀,只是为了额外的懒惰点,我使用this.作为访问实例成员成员的智能感知列表的快捷方式。

答案 6 :(得分:1)

在JavaScript中,是的!在没有必要的语言中,没有。有些人这样做是为了让阅读代码的人可以看到“成员” - 但是你的IDE应该能够通过突出显示它来处理它。

当VS 2010问世时,我的世界和平计划是为WPF代码编辑器编写一个扩展,在每个对成员变量的引用之前显示this.,而不是那个前缀。然后那些需要提醒的人将不再需要输入它,而那些不喜欢它的人可能根本无法安装我的扩展程序并且可以自由删除他们看到的任何不必要的this.前缀。

答案 7 :(得分:0)

我认为如果你特别提到类变量,你应该总是包含它。

这样做的原因是,如果您稍后添加同名的局部变量,则需要使用this.重命名所有类变量,那么为什么不保存未来的自己一段时间并且麻烦? / p>