在 C# 中,base
关键字用于访问基类的成员:字段、方法、属性或构造函数。它用于在派生类中调用基类的成员,特别是当需要引用被派生类隐藏的成员或在派生类的构造函数中调用基类的构造函数时。以下是 base
关键字使用的几种场景。
1. 调用基类的方法
当派生类重写基类的方法时,可以使用 base
关键字调用基类中的方法实现。这在希望扩展而非完全替换基类实现的情境中非常有用。
public class BaseClass
{
public virtual void Display()
{
Console.WriteLine("显示基类信息");
}
}
public class DerivedClass : BaseClass
{
public override void Display()
{
base.Display(); // 调用基类的 Display 方法
Console.WriteLine("显示派生类信息");
}
}
2. 访问被隐藏的成员
如果派生类隐藏了继承的成员(例如,通过使用 new
关键字),可以通过 base
关键字访问被隐藏的基类成员。
public class BaseClass
{
public void DoSomething()
{
Console.WriteLine("基类的 DoSomething");
}
}
public class DerivedClass : BaseClass
{
public new void DoSomething()
{
// 必要时,可以调用被隐藏的 DoSomething 方法
base.DoSomething();
Console.WriteLine("派生类的 DoSomething");
}
}
3. 调用基类的构造函数
在派生类的构造函数中,可以使用 base
关键字调用基类的构造函数。这是初始化派生类实例的一部分,在派生类的构造函数执行体之前执行。
public class BaseClass
{
public int Value { get; }
public BaseClass(int value)
{
this.Value = value;
}
}
public class DerivedClass : BaseClass
{
public DerivedClass(int value) : base(value) // 调用基类的构造函数
{
}
}
注意事项
- 如果派生类的构造函数没有显式地使用
base
关键字调用基类的构造函数,则自动调用基类无参数的构造函数。如果基类没有无参数构造函数且未通过base
显式调用其他构造函数,则会发生编译错误。 base
关键字在静态方法或静态构造函数中不能使用,因为它们不属于实例。- 在访问成员时,
base
与this
关键字不同,this
用于引用当前实例的成员,而base
用于访问基类成员。
正确使用 base
关键字可以使派生类与基类之间的交互更加灵活和清晰,有助于实现代码的逻辑分层和重用。