C#基础
示例
所述base关键字被从基类用于访问成员。它通常用于调用虚拟方法的基本实现,或指定应调用哪个基本构造函数。
选择一个构造函数
public class Child : SomeBaseClass { public Child() : base("some string for the base class") { } } public class SomeBaseClass { public SomeBaseClass() { //newChild()将不会调用此构造函数,因为它没有参数 } public SomeBaseClass(string message) { //由于Child构造函数中指定了参数,因此newChild()将使用此基本构造函数 Console.WriteLine(message); } }
虚方法的调用基础实现
public override void SomeVirtualMethod() { //做某事,然后调用基础实现 base.SomeVirtualMethod(); }
可以使用base关键字从任何方法调用基本实现。这将方法调用直接与基本实现联系在一起,这意味着,即使新的子类覆盖了虚拟方法,仍将调用基本实现,因此在使用时必须谨慎。
public class Parent { public virtual int VirtualMethod() { return 1; } } public class Child : Parent { public override int VirtualMethod() { return 11; } public int NormalMethod() { return base.VirtualMethod(); } public void CallMethods() { Assert.AreEqual(11, VirtualMethod()); Assert.AreEqual(1, NormalMethod()); Assert.AreEqual(1, base.VirtualMethod()); } } public class GrandChild : Child { public override int VirtualMethod() { return 21; } public void CallAgain() { Assert.AreEqual(21, VirtualMethod()); Assert.AreEqual(11, base.VirtualMethod()); //请注意,下面对NormalMethod的调用仍返回该值 //即使该方法已被覆盖,也可以从极端基类中获取 //在儿童班。 Assert.AreEqual(1, NormalMethod()); } }