C# base和this的用法

/*
* 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 = ;
Console.Write(age2); } public MyDerivedClass()
: this()//调用当前实例有参数的构造函数。如果只调用这个构造函数,那还需要调用一次基类没有参的构造函数!!!
{
age = ;
Console.WriteLine(age);
} public MyDerivedClass(int i) : base(i)//调用基类有参数的构造函数
{
age = ;
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(); //输出"调用父类无参数的构造函数",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(, ); //输出"调用父类无参数的构造函数","两个变量的参数"
//执行顺序:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i, int j) Console.ReadKey();
}
}
上一篇:HOG特征-理解篇


下一篇:图像特征提取三大法宝:HOG特征,LBP特征,Haar特征