base
base关键字用于从派生类中访问基类的成员:
调用基类上已被其他方法重写的方法。
指定创建派生类实例时应调用的基类构造函数。
基类访问只能在构造函数、实例方法或实例属性访问器中进行。
示例:
在派生类中调用基类方法。
//base关键字
//访问基类成员
usingSystem;
publicclassBaseClass
{
protectedstring_className="BaseClass";
publicvirtualvoidPrintName()
{
Console.WriteLine("ClassName:{0}",_className);
}
}
classDerivedClass:BaseClass
{
publicstring_className="DerivedClass";
publicoverridevoidPrintName()
{
Console.Write("TheBaseClassNameis{0}");
//调用基类方法
base.PrintName();
Console.WriteLine("ThisDerivedClassis{0}",_className);
}
}
classTestApp
{
publicstaticvoidMain()
{
DerivedClassdc=newDerivedClass();
dc.PrintName();
}
}
/**//*
控制台输出:
TheBaseClassNameisBaseClass
ThisDerivedClassisDerivedClass
*/
在派生类中调用基类构造函数。
//keywords_base2.cs
usingSystem;
publicclassBaseClass
{
intnum;
publicBaseClass()
{
Console.WriteLine("inBaseClass()");
}
publicBaseClass(inti)
{
num=i;
Console.WriteLine("inBaseClass(int{0})",num);
}
}
publicclassDerivedClass:BaseClass
{
//该构造器调用BaseClass.BaseClass()
publicDerivedClass():base()
{
}
//该构造器调用BaseClass.BaseClass(inti)
publicDerivedClass(inti):base(i)
{
}
staticvoidMain()
{
DerivedClassdc=newDerivedClass();
DerivedClassdc1=newDerivedClass(1);
}
}
/**//*
控制台输出:
inBaseClass()
inBaseClass(1)
*/
注意点
从静态方法中使用base关键字是错误的。
base主要用于面向对象开发的对态这方面,在示例2中有体现。
this
this关键字引用类的当前实例。
以下是this的常用用途:
限定被相似的名称隐藏的成员
将对象作为参数传递到其他方法
声明索引器
示例:
综合示例。
//this关键字
//keywords_this.cs
usingSystem;
classEmployee
{
privatestring_name;
privateint_age;
privatestring[]_arr=newstring[5];
publicEmployee(stringname,intage)
{
//使用this限定字段,name与age
this._name=name;
this._age=age;
}
publicstringName
{
get{returnthis._name;}
}
publicintAge
{
get{returnthis._age;}
}
//打印雇员资料
publicvoidPrintEmployee()
{
//将Employee对象作为参数传递到DoPrint方法
Print.DoPrint(this);
}
//声明索引器
publicstringthis[intparam]
{
get{return_arr[param];}
set{_arr[param]=value;}
}
}
classPrint
{
publicstaticvoidDoPrint(Employeee)
{
Console.WriteLine("Name:{0}nAge:{1}",e.Name,e.Age);
}
}
classTestApp
{
staticvoidMain()
{
EmployeeE=newEmployee("Hunts",21);
E[0]="Scott";
E[1]="Leigh";
E[4]="Kiwis";
E.PrintEmployee();
for(inti=0;i<5;i++)
{
Console.WriteLine("FriendsName:{0}",E[i]);
}
Console.ReadLine();
}
}
/**//*
控制台输出:
Name:Hunts
Age:21
FriendsName:Scott
FriendsName:Leigh
FriendsName:
FriendsName:
FriendsName:Kiwis
*/