C# 构造函数里的base和this的区别
this只是调用本身,但是需要调用一次基类无参的构造函数.
base是调用基类的有参数构造函数。
class BaseClass { private int numA; public BaseClass() { Console.WriteLine("基类的无参数构造函数. value:{0}", numA); } public BaseClass(int i) { this.numA = i; Console.WriteLine("基类带一个参数的构造函数. value:{0}", numA); } } class ChildClassA : BaseClass { private int numB; public ChildClassA() { Console.WriteLine("子类无参数构造函数. value:{0}", numB); } public ChildClassA(int i) { this.numB = i; Console.WriteLine("子类带有一个参数的构造函数. value:{0}", numB); } public ChildClassA(int i, int j) : base(i) { this.numB = j; Console.WriteLine("子类带有两个参数的构造函数. value:{0}", numB); } } class ChildClassB : BaseClass { private int numB; public ChildClassB() { Console.WriteLine("子类无参数构造函数. value:{0}", numB); } public ChildClassB(int i) { this.numB = i; Console.WriteLine("子类带有一个参数的构造函数. value:{0}", numB); } public ChildClassB(int i, int j) : this(i) { this.numB = j; Console.WriteLine("子类带有两个参数的构造函数. value:{0}", numB); } } class Demo { static void Main(string[] args) { Console.WriteLine("使用base\n"); ChildClassA a = new ChildClassA(2, 4); Console.WriteLine(); Console.WriteLine("----------------------------------------\n"); Console.WriteLine("使用this\n"); ChildClassB b = new ChildClassB(2, 4); Console.ReadKey(); } }
执行结果:
--------------------------------结果---------------------------------- 使用base 基类带一个参数的构造函数. value:2 子类带有两个参数的构造函数. value:4 ---------------------------------------- 使用this 基类的无参数构造函数. value:0 子类带有一个参数的构造函数. value:2 子类带有两个参数的构造函数. value:4 --------------------------------结果--------------------------------