用法一
this关键字的作用是解决当传入参数的名称和数据字段的名称,类型完全相同时产生的作用于歧义,一般情况下我们应该避免产生重名的习惯
先来演示下:
class Airplane { public int age; public string name; public void SetDeriverName(string name) { name = name; } }调用上面的类实例
Airplane fly = new Airplane(); fly.SetDeriverName("Jack"); Console.WriteLine("驾驶员的名字是:{0}", fly.name);编译上面代码时候,VS会给出警告,并且fly.name字段的内容为空。我们通过SetDeriverName给数据成员name字段赋值根本无效;问题在于编译器认为赋值号右边的name指向当然方法作用域内的变量,而不是类作用域中的字段。要想让编译器知道赋值号右边的name是准备赋值给类数据成员name字段的,可以使用this关键字解决这个问题,只需在数据成员前使用this关键字即。事实上this是可选的,当不存在重名时候,根本不需要使用this
当我们使用this之后,VS的智能感知,自动的识别出this.name 就是public string name中的name字段
用法二
用this串联构造函数
this的另一个用法是用来串联构造函数,用法如下:
public Airplane() { } public Airplane(int currAge) { if(currAge<25) { currAge = 25; } age = currAge; } public Airplane(int currAge, string name) { if(currAge<25) { currAge = 25; } age = currAge; this.name = name; }
public Airplane() { } public Airplane(int currAge) : this(currAge, "") { } public Airplane(int currAge, string name) { if(currAge<25) { currAge = 25; } age = currAge; this.name = name; } }