反对使用';这';在C#类中
本文关键字:类中 | 更新日期: 2023-09-27 18:29:31
我几乎读完了John Skeet的书C#深度,第三版,我很惊讶他没有在class
es中使用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);
}
// ...
}
Autosize
和Controls
上没有this
,嗯?我们不应该使用this
来避免变量是指类的成员还是指相对于类全局的某个变量的歧义吗?
我想知道,因为我想确保我写的所有代码都经过Skeet认证?
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;
所有其他使用此关键字的情况,请检查此答案。你什么时候用";这个";关键字?