Menu
CoddyTech

“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() 显式调用父类版本的方法。当你想扩展父类的行为,而不是完全替换它时,这种做法很有用。

challenge icon

挑战

简单

让我们构建一个产品库存系统,演示派生类如何使用 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() 方法,并打印结果
        
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: C# 在线编译器