c#中的this关键字

来源:互联网 发布:linux好学吗 编辑:程序博客网 时间:2024/05/11 15:35

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;
        }
   }
}


原创粉丝点击