/*
* this关键字
* this关键字引用类确当前实例
* 注意:静态成员要领中不能使用this关键字,,this关键字只能在实例结构函数、实例要领或实例访谒器中使用
*/
/*
* base关键字
* base关键字用于从派生类中访谒基类的成员;
* 指定创建派生类实例时挪用基类结构函数;
* 挪用基类上已被重写的要领
* 注意:不能从静态要领中使用base关键字,base关键字只能在实例结构函数、实例要领或实例访谒器中使用
*/
base用法
1、base挪用结构要领
public class BaseClass { public BaseClass() { Console.WriteLine("挪用基类--无参数的结构函数"); } public BaseClass(string name) { Console.WriteLine("挪用基类--有参数的结构函数"); } } public class DerivedClass:BaseClass { public DerivedClass() : base() { } public DerivedClass(string name) : base(name) { } static void Main() { DerivedClass a = new DerivedClass();//挪用基类--无参数的结构函数 DerivedClass b = new DerivedClass("Andy");//挪用基类--有参数的结构函数 Console.ReadLine(); } }
2、base在派生类中挪用基类的要领
public class BaseClass { public virtual void GetInfo() { Console.WriteLine("Andy."); } } public class DerivedClass :BaseClass { public override void GetInfo() { base.GetInfo();//挪用基类的要领,显示Andy. Console.WriteLine("Chen");//显示Andy.Chen } }
base和this的综合使用
public class MyBaseClass
{
public MyBaseClass()
{
Console.Write("挪用父类无参数的结构函数");
}
public MyBaseClass(int i)
{
Console.Write("挪用父类一个参数的结构函数");
}
}
public class MyDerivedClass : MyBaseClass
{
public int age;
public static int age2;//只要类里存在静态变量,那么静态变量总是最先初始化的。
//静态结构函数只执行一次
static MyDerivedClass() //既然要初始化静态变量,就要挪用静态的结构函数。
{
age2 = 100;
Console.Write(age2);
}
public MyDerivedClass()
: this(5)//挪用当前实例有参数的结构函数。如果只挪用这个结构函数,那还需要挪用一次基类没有参的结构函数!!!
{
age = 101;
Console.WriteLine(age);
}
public MyDerivedClass(int i) : base(i)//挪用基类有参数的结构函数
{
age = 102;
Console.WriteLine(age);
}
public MyDerivedClass(int i, int j)
{
Console.WriteLine("两个变量的参数");
}
}
class Program
{
static void Main(string[] args)
{
MyDerivedClass myder = new MyDerivedClass(); //输出100 ,"挪用父类无参数的结构函数",101
//执行挨次:<1>: static MyDerivedClass() <2>: public MyBaseClass() <3>:public MyDerivedClass()
//---------------------------------------------------------------------------------------------
MyDerivedClass myder2 = new MyDerivedClass(5); //输出"挪用父类无参数的结构函数",102。
//在初始化myder东西的时候已经初始化过静态变量age2了。因为静态结构函数最多执行一次,所以初始化myder2东西的时候就不会在继续初始化静态变量age2了
//执行挨次:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i)
//假如我想在初始化myder2东西的时候挪用父类带有一个参数的结构函数怎么办呢?很好办只要在派生类的结构函数后面加一个:base(i)
/*
base 关键字用于从派生类中访谒基类的成员;指定创建派生类实例时应挪用的基类结构函数。
public MyDerivedClass(int i):base(i)
{
age = 102;
Console.WriteLine(age);
}
执行挨次:<1>: public MyBaseClass(int i) <2>: public MyDerivedClass(int i)
顾这里输出的是 "挪用父类一个参数的结构函数",102
*/
//---------------------------------------------------------------------------------------------
MyDerivedClass myder3 = new MyDerivedClass(5, 6); //输出"挪用父类无参数的结构函数","两个变量的参数"
//执行挨次:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i, int j)
Console.ReadKey();
}
}