this指类实例本身.比较正式说法是下面那种:
this操作数代表的是指向此对象的参考指针。也就是说,在建立对象的实体后,我们就可以使用this来存取到此
对象实体。另外,this操作数也可以用来解决名称相同的问题。
需要注意的是:静态方法中不能使用this。
示例如下:
Example 1:
this操作数用来解决名称相同的问题。
class Employee
{
...
public void SetEmpName(string EmpName)
{
EmpName = EmpName;//问题语句
}
private string EmpName; //Employee的成员变量
}
上述代码的本意是要将SetEmpName的传入参数EmpName的值指定给Employee类的成员变量EmpName。但是这样做并
没有成功,因为系统并不知道上述问题语句中的第一个EmpName指的是类成员。
解决方法是将问题语句修改如下:
this.EmpName = EmpName;
Example 2:
使用this操作数返回目前对象的参考。
class Employee
{
...
public Employee SetEmpName(string EmpName)
{
this.EmpName = EmpName;
return this;
}
public Employee SetEmpID(string EmpID)
{
mstrEmpID = EmpID;
return this;
}
private string EmpName;
private string mstrEmpID = "";
}
这样,我们可以使用如下语句来设置员工代号和员工名称了:
public class HumanResource {
public static int Main(){
Employee e1 = new Employee();
e1.SetEmpID("001").SetEmpName("William");//示例语句
return 0;
}
}
Example 3(这是个完整的示例,可以编译运行):
this操作数用在构造器(Constructor)中的情况。
using System;
namespace UCOM.HR{
public class Employee {
public Employee() :this("999",10000){ //示例语句
}
public Employee(string EmpID,double BaseSalary){
mstrEmpID=EmpID;
mdblBaseSalary=BaseSalary;
}
public void SetEmpID(string EmpID){
mstrEmpID=EmpID;
}
public string GetEmpID(){
return mstrEmpID;
}
public double GetBaseSalary(){
return mdblBaseSalary;
}
public void SetEmpName(string EmpName){
mstrEmpName=EmpName;
}
public string GetEmpName(){
return mstrEmpName;
}
public static void SetCompanyName(string CompanyName){
mstrCompanyName=CompanyName;
}
public static string GetCompanyName(){
return mstrCompanyName;
}
private static string mstrCompanyName="";
private string mstrEmpID="";
private string mstrEmpName="";
private double mdblBaseSalary=0;
}
public class HumanResource {
public static int Main() {
Employee e1 = new Employee();
Console.WriteLine("员工一:员工代号={0},基本薪资={1}",e1.GetEmpID(),e1.GetBaseSalary() );
return 0;
}
}
}