微软MSDN的解释如下:
base 关键字用于从派生类中访问基类的成员:
-
调用基类上已被其他方法重写的方法。
-
指定创建派生类实例时应调用的基类构造函数。
基类访问只能在构造函数、实例方法或实例属性访问器中进行。
从静态方法中使用 base 关键字是错误的。
下面是做的实验
1 public class Active 2 { 3 decimal value { get; set; } 4 public string name { get; set; } 5 public Active() 6 { 7 name = "active构造函数赋值"; 8 Console.WriteLine("父类构造函数"); 9 Console.WriteLine(name+"active"); 10 } 11 public Active(int id) 12 { 13 name = "带参数的构造函数"; 14 Console.WriteLine(name); 15 } 16 public virtual void testActive() 17 { 18 Console.WriteLine(name+"父类"); 19 } 20 }
1 public class snapped : Active 2 { 3 4 public snapped() 5 { 6 Console.WriteLine(base.name+"子类构造函数"); 7 } 8 9 public void testsnappend() 10 { 11 Console.WriteLine(this.name); 12 base.name = "父类的属性"; 13 Console.WriteLine("在这里修改name的值"); 14 base.testActive(); 15 this.testActive(); 16 } 17 public override void testActive() 18 { 19 Console.WriteLine(name+"子类"); 20 } 21 }
最后在入口
1 static void Main(string[] args) 2 { 3 snapped sp = new snapped(); 4 sp.testsnappend(); 5 Console.WriteLine("======================="); 6 sp.testActive(); 7 Console.ReadKey(); 8 }
最后输出的结果是.
父类构造函数
active构造函数赋值active
active构造函数赋值子类构造函数
active构造函数赋值
在这里修改name的值
父类的属性父类
父类的属性子类
=======================
父类的属性子类
如果在子类构造函数修改一下
1 public snapped():base(1) 2 { 3 Console.WriteLine(base.name + "子类构造函数"); 4 }
执行的结果会变成:
带参数的构造函数
带参数的构造函数子类构造函数
带参数的构造函数
在这里修改name的值
父类的属性父类
父类的属性子类
=======================
父类的属性子类