C# base和this的用法

1 介绍

this

  • this关键字
  • this关键字引用类的当前实例
  • 注意:静态成员方法中不能使用this关键字,this关键字只能在实例构造函数、实例方法或实例访问器中使用

base

  • base关键字
  • base关键字用于从派生类中访问基类的成员;
  • 指定创建派生类实例时调用基类构造函数;
  • 调用基类上已被重写的方法
  • 注意:不能从静态方法中使用base关键字,base关键字只能在实例构造函数、实例方法或实例访问器中使用

2 代码

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();
	}
}

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();
	}
}

参考

1、C# base和this的用法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值