VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • c#语法学产this?

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  this 关键字所指的是类别 (Class) 的目前执行个体 (Instance),而且也用来当做扩充方法之第一个参数的修饰词 (Modifier)。

  以下为 this 的常见用法:

  this关键字使用的地方:

  1,索引

  2,this简单的说,表示所在类.准确的说是代表类的对像.

  3,其他场合.代表构造函数

  //要限定被类似名称所隐藏的成员,例如:

publicEmployee(stringname,stringalias)
{
  this.name=name;
  this.alias=alias;
}

  //要将物件做为参数传递到其他方法,例如:

  CalcTax(this);

  //要宣告索引子,例如:

publicintthis[intparam]
{
  get{returnarray[param]; }
  set{array[param]=value;}
}
  //因为静态成员函式存在於类别层级,且非物件的一部分,所以不具有 this 指标。在静态方法中参考 this 是错误的。

  base 关键字用於存取衍生类别中的基底类别 (Base Class) 成员:

  呼叫一个已被其他方法覆写之基底类别中的方法。

  指定建立衍生类别执行个体时,所要呼叫的基底类别建构函式。

  基底类别只允许在建构函式、执行个体方法 (Instance Method) 或执行个体属性存取子中存取。

  在静态方法中使用 base 关键字是错误的。

  //於此例中,基底类别 Person 和衍生类别 Employee 都有一个名为 Getinfo 的方法。使用 //base 关键字,就可以从衍生类别中呼叫基底类别的 Getinfo 方法。

//Accessingbaseclassmembers
usingSystem;
publicclassPerson
{
  protectedstringssn="444-55-6666";
  protectedstringname="JohnL.Malgraine";
  publicvirtualvoidGetInfo()
  {
    Console.WriteLine("Name:{0}",name);
    Console.WriteLine("SSN:{0}",ssn);
  }
}
classEmployee:Person
{
  publicstringid="ABC567EFG";
  publicoverridevoidGetInfo()
  {
    //CallingthebaseclassGetInfomethod:
    base.GetInfo();
    Console.WriteLine("EmployeeID:{0}",id);
  }
}
classTestClass
{
  staticvoidMain()
  {
    EmployeeE=newEmployee();
    E.GetInfo();
  }
}

 

  //此范例显示了在建立衍生类别的执行个体时,要如何指定呼叫的基底类别建构函式。usingSystem;
publicclassBaseClass
{
  intnum;
  publicBaseClass()
  {
    Console.WriteLine("inBaseClass()");
  }
  publicBaseClass(inti)
  {
    num=i;
    Console.WriteLine("inBaseClass(inti)");
  }
  publicintGetNum()
  {
    returnnum;
  }
}
publicclassDerivedClass:BaseClass
{
  //ThisconstructorwillcallBaseClass.BaseClass()
  publicDerivedClass():base()
  {
  }
  //ThisconstructorwillcallBaseClass.BaseClass(inti)
  publicDerivedClass(inti):base(i)
  {
  }
  staticvoidMain()
  {
    DerivedClassmd=newDerivedClass();
    DerivedClassmd1=newDerivedClass(1);
  }
}

/*base

  简单点的说,代表直接父类.

  如果子类的父类还有父类,这时base只能访问到它的直接父类

  也就说说父类的父类是没有办法访问到的.

  1,使用base可以访问父类中的成员

  2,使用父类构造函数.

*
*/
usingSystem;
usingTraffic;
namespaceTest
{
  classTest
  {
    staticvoidMain()
    {
      CartheCar1=newCar();
      CartheCar2=newCar("吉利",300);
      GaoJiCartheCar3=newGaoJiCar();
    }
  }
}
namespaceTraffic
{
  publicclassVehicle
  {
    privatestringname;
    privateintspeed;
    publicVehicle(){}
    publicVehicle(stringname)
    {
      this.name=name;
    }
    publicVehicle(stringname,intspeed)
    {
      this.name=name;
      this.speed=speed;
      Console.WriteLine("調用了父類中的兩個參數的構造函數.");
    }
    publicvoidgetName()//成員方法
    {
      Console.WriteLine(this.name);
    }
  }
  publicclassCar:Vehicle
  {
    publicCar()
    {
      base.getName();//使用父類中的成員方法
    }
    //base(name,200)中的name是直接傳入的Car(stringname)中的name
    //因此這里在name前不需要有數據類型
    //這里會先執行父類的再執行子類的構造函數
    publicCar(stringname,intspeed):base(name,speed)
    {
      Console.WriteLine("子類中的構造函數");
    }
  }
  publicclassGaoJiCar:Car
  {
    //這里會依次執行Vehicle,Car,GaoJiCar都帶有兩個參數的構造函數
    publicGaoJiCar():base("長安",124)
    {
      Console.WriteLine("子類的子類中的構造函數");
    }
  }
}

 

  //此范例显示了在建立衍生类别的执行个体时,要如何指定呼叫的基底类别建构函式。usingSystem;
publicclassBaseClass
{
  intnum;
  publicBaseClass()
  {
    Console.WriteLine("inBaseClass()");
  }
  publicBaseClass(inti)
  {
    num=i;
    Console.WriteLine("inBaseClass(inti)");
  }
  publicintGetNum()
  {
    returnnum;
  }
}
publicclassDerivedClass:BaseClass
{
  //ThisconstructorwillcallBaseClass.BaseClass()
  publicDerivedClass():base()
  {
  }
  //ThisconstructorwillcallBaseClass.BaseClass(inti)
  publicDerivedClass(inti):base(i)
  {
  }
  staticvoidMain()
  {
    DerivedClassmd=newDerivedClass();
    DerivedClassmd1=newDerivedClass(1);
  }
}

/*base

  简单点的说,代表直接父类.

  如果子类的父类还有父类,这时base只能访问到它的直接父类

  也就说说父类的父类是没有办法访问到的.

  1,使用base可以访问父类中的成员

  2,使用父类构造函数.

*
*/
usingSystem;
usingTraffic;
namespaceTest
{
  classTest
  {
    staticvoidMain()
    {
      CartheCar1=newCar();
      CartheCar2=newCar("吉利",300);
      GaoJiCartheCar3=newGaoJiCar();
    }
  }
}
namespaceTraffic
{
  publicclassVehicle
  {
    privatestringname;
    privateintspeed;
    publicVehicle(){}
    publicVehicle(stringname)
    {
      this.name=name;
    }
    publicVehicle(stringname,intspeed)
    {
      this.name=name;
      this.speed=speed;
      Console.WriteLine("調用了父類中的兩個參數的構造函數.");
    }
    publicvoidgetName()//成員方法
    {
      Console.WriteLine(this.name);
    }
  }
  publicclassCar:Vehicle
  {
    publicCar()
    {
      base.getName();//使用父類中的成員方法
    }
    //base(name,200)中的name是直接傳入的Car(stringname)中的name
    //因此這里在name前不需要有數據類型
    //這里會先執行父類的再執行子類的構造函數
    publicCar(stringname,intspeed):base(name,speed)
    {
      Console.WriteLine("子類中的構造函數");
    }
  }
  publicclassGaoJiCar:Car
  {
    //這里會依次執行Vehicle,Car,GaoJiCar都帶有兩個參數的構造函數
    publicGaoJiCar():base("長安",124)
    {
      Console.WriteLine("子類的子類中的構造函數");
    }
  }
}



相关教程