有什么理由反对使用'这个'在C#类里面?

时间:2016-01-08 06:16:33

标签: c# oop

我几乎已经读完John Skeet的书 C#In Depth,Third Edition ,我很惊讶他没有使用{{1内部this.property es。但是既然是John Skeet,我相信这意味着它有充分的理由。

示例(来自第466页):

class

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); } // ... } this上没有Autosize,是吗?我们不应该使用Controls来避免关于变量是指类的成员还是某个相对于类的全局变量的模糊性?

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

1 个答案:

答案 0 :(得分:2)

  

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

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

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

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;

此关键字的所有其他用法请查看此答案。 When do you use the "this" keyword?