C# 您是否应该始终使用“引用”来引用局部类变量;这";

C# 您是否应该始终使用“引用”来引用局部类变量;这";,c#,C#,在C#中,可以使用“this”关键字引用类中的值 class MyClass { private string foo; public string MyMethod() { return this.foo; } } 虽然我认为答案可能是用户偏好,但在类中使用this关键字作为局部值是否是最佳做法?我更喜欢这种语法。随着类越来越大,函数越来越复杂,可以方便地读取变量名并知道它是否是实例变量,而无需引用代码的另一部分 编辑:我意识到,如果一个人在

在C#中,可以使用“this”关键字引用类中的值

class MyClass
{
    private string foo;

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

虽然我认为答案可能是用户偏好,但在类中使用this关键字作为局部值是否是最佳做法?

我更喜欢这种语法。随着类越来越大,函数越来越复杂,可以方便地读取变量名并知道它是否是实例变量,而无需引用代码的另一部分

编辑:我意识到,如果一个人在跟踪变量方面有困难,那么可能是时候进行重构了。这在抽象上是好的。因此,为了澄清:在类及其关系不简单的情况下(当然它们是存在的),或者在代码中,人们没有进行重构,或者没有遵循好的准则来保持参数名称不同于实例变量的情况下,我要说(imho!)使用“this”对于清晰的代码来说不是一个坏主意。

本着,我想说,一般来说,这不是一种特别有用的做法。只要删除
this
,几乎可以将
this
的任何用法缩短为等效表达式


一个例外是,如果您有一个本地参数,它恰好与另一个类成员同名;在这种情况下,您必须使用
this
来区分这两种情况。但这是一种很容易避免的情况,只需重命名参数即可。

我使用
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;
    } 


}

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


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

我从不使用它。通常,变量是否为成员并不重要。保持你的方法足够小,这样记住哪些变量是局部变量就不会有问题,而且记住哪些是成员也不会有太多麻烦

我使用“\u1”作为成员变量的前缀,因为它很容易被忽略。但这意味着永远不会与局部或参数发生冲突,因此。没有必要


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

你说得对,这是我的首选。当然,许多公司强制执行一套编码风格指导原则,要么要求在任何实例成员之前使用
this
,要么要求它不出现。(有人知道.NET framework的Microsoft FxCop规则是什么吗?)

就我个人而言,我更喜欢在属于实例的任何属性、方法或字段之前显示
this
。这让我更容易区分它的归属:

  • 类实例的成员(前缀为this)
  • 静态类成员(以类的名称作为前缀)
  • 局部范围变量(无前缀)

对我来说,能够不太含糊地阅读代码比保存
this的5个字符更重要。
。例如,我立即知道我需要
dispose()
在此范围内打开的所有本地范围项,并且我不会将它们与不应被释放的实例成员混淆。见鬼,只是为了额外的惰性点,我使用
这个。
作为访问实例成员的intellisense成员列表的快速方法。

在JavaScript中,是的!在不需要的语言中,不需要。有些人这样做是为了让阅读代码的人能够看到“成员身份”——但是您的IDE应该能够通过突出显示它来解决这个问题


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

我认为,如果你特别指的是类变量,你应该始终包含提醒


这样做的原因是,如果您以后添加了一个同名的局部变量,则需要使用
this来重命名所有类变量。
因此,为什么不为将来的自己节省一些时间和麻烦呢?

另一个例外是在已扩展的类中使用扩展方法。你必须用这个,没错。但是如果您控制这个类,您可能需要在使用扩展方法时三思而后行,而只使用类方法。如果你不能控制这个类,你就不会遇到这种情况(没有双关语的意思)。唯一的例外是,如果您使用的扩展方法接受接口作为参数,在这种情况下,扩展方法是您唯一的选择:-)这是对DRY的错误陈述。DRY指的是代码重用,而不是为了节省一些击键而删除语法。我不认为这是一种误解。“this”不仅仅是几个按键——它是一个语法上有意义的结构,其使用通常是多余的。来自WP:“DRY不仅仅是为了避免代码重复,更一般地说是为了避免使用多种[…]方式来表达[…]知识”。这是个人偏好,但在我看来,如果你需要使用“This”,作为理解复杂类的支柱,也许是时候考虑一下