反对使用';这';在C#类中

本文关键字:类中 | 更新日期: 2023-09-27 18:29:31

我几乎读完了John Skeet的书C#深度,第三版,我很惊讶他没有在classes中使用this.property。但既然是John Skeet,我相信这意味着有充分的理由。

示例(来自第466页):

class AsyncForm : Form
{
    Label label; 
    Button button;
    public AsyncForm ( )
    {
       label = new Label { Location = new Point(10, 20),
                            Text = "Length" };
       button = new Button { Location = new Point(10, 50),
                             Text = "Click" };
       button.Click += DisplayWebSiteLength;
       Autosize = true;
       Controls.Add(label);
       Controls.Add(button);
    }
    // ... 
}

AutosizeControls上没有this,嗯?我们不应该使用this来避免变量是指类的成员还是指相对于类全局的某个变量的歧义吗?

我想知道,因为我想确保我写的所有代码都经过Skeet认证?

反对使用';这';在C#类中

this关键字指代类的当前实例,并且是也用作扩展方法的第一个参数的修饰符。[来自MSDN]

AsyncForm类正在继承Form类。您所说的两个属性是Form类的属性,而不是AysncForm类,这就是为什么没有this关键字与这两个属性一起使用。

我将为这个提供一个简单的用例。

public class Person
{
   public string name;// this is global variable
   public Person(string name)
   {
     //now we have two variable with name 'name' and we have ambiguity. 
     //So when I will use this.name it will use the global variable.
     this.name = name; //will assign constructor name parameter to global name variable. 
    //If I will do name = name, it will use the local variable for assigning the value into 
     //local variable itself because local variable has high priority than global variable.
   }
}

为了提高代码的可读性,我建议在全局变量名中始终使用"_"。

public string _name;

和内部构造函数

_name = name;

所有其他使用此关键字的情况,请检查此答案。你什么时候用";这个";关键字?