-
c#语法学产this?
this 关键字所指的是类别 (Class) 的目前执行个体 (Instance),而且也用来当做扩充方法之第一个参数的修饰词 (Modifier)。
以下为 this 的常见用法:
this关键字使用的地方:
1,索引
2,this简单的说,表示所在类.准确的说是代表类的对像.
3,其他场合.代表构造函数
//要限定被类似名称所隐藏的成员,例如:
publicEmployee(stringname,stringalias)
{
this.name=name;
this.alias=alias;
}
//要将物件做为参数传递到其他方法,例如:
CalcTax(this);
//要宣告索引子,例如:
publicintthis[intparam]
//因为静态成员函式存在於类别层级,且非物件的一部分,所以不具有 this 指标。在静态方法中参考 this 是错误的。
{
get{returnarray[param]; }
set{array[param]=value;}
}
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("子類的子類中的構造函數");
}
}
}