“base”关键字
本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 20 课,共 70 课。
派生类继承基类时,你通常需要直接访问父类的成员。base 关键字提供了这种连接,让你可以调用基类构造函数,或访问它的方法和属性。
base 最常见的用途是调用父类的构造函数。创建派生对象时,你可以将值传递给基类:
public class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Name = name;
}
}
public class Dog : Animal
{
public string Breed { get; set; }
public Dog(string name, string breed) : base(name)
{
Breed = breed;
}
}: base(name) 语法会在 Dog 构造函数的主体运行前调用 Animal 构造函数。这能确保先正确初始化基类。
你也可以在派生类中使用 base 调用父类方法:
public class Animal
{
public void Speak()
{
Console.WriteLine("Animal sound");
}
}
public class Dog : Animal
{
public void Speak()
{
base.Speak(); // 调用 Animal 的 Speak 方法
Console.WriteLine("Woof!");
}
}这里,base.Speak() 显式调用父类版本的方法。当你想扩展父类的行为,而不是完全替换它时,这种做法很有用。
挑战
简单让我们构建一个产品库存系统,演示派生类如何使用 base 关键字正确初始化父类,并扩展继承来的行为。
你将创建 3 个文件来组织代码:
Product.cs:在Inventory命名空间中定义一个Product类。这个基类表示任何产品,并包含Name属性(string)和Price属性(decimal)。添加一个接受这两个值的构造函数,以及一个返回"{Name}: ${Price}"的GetInfo()方法。ElectronicProduct.cs:在Inventory命名空间中定义一个继承自Product的ElectronicProduct类。这个类添加一个WarrantyMonths属性(int)。构造函数应接受名称、价格和保修月数,使用base将名称和价格传递给父类构造函数。创建一个GetInfo()方法,先使用base调用父类的GetInfo(),然后追加" (Warranty: {WarrantyMonths} months)"来扩展输出。Program.cs:在主文件中,使用输入值创建一个ElectronicProduct,并调用GetInfo()显示完整信息。
你将收到 3 个输入:
- 产品名称
- 价格
- 保修月数
打印对电子产品调用 GetInfo() 后的结果。
例如,如果输入是 Laptop、999.99 和 24,输出应为:
Laptop: $999.99 (Warranty: 24 months)注意,派生类是在基类输出的基础上进行扩展,而不是重复编写逻辑。base 关键字让你可以顺畅地重用和扩展父类的行为!
亲手试试
using System;
using Inventory;
class Program
{
public static void Main(string[] args)
{
// 读取输入
string name = Console.ReadLine();
decimal price = Convert.ToDecimal(Console.ReadLine());
int warrantyMonths = Convert.ToInt32(Console.ReadLine());
// TODO:使用输入的值创建一个 ElectronicProduct 对象
// TODO:调用你的电子产品对象的 GetInfo() 方法,并打印结果
}
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: C# 在线编译器