Menu
CoddyTech

Từ khóa 'base'

Thuộc phần Lập trình hướng đối tượng trong hành trình C# của Coddy. Bài học 20 trên 70.

Khi một lớp dẫn xuất kế thừa từ lớp cơ sở, bạn thường cần truy cập trực tiếp vào các thành viên của lớp cha. Từ khóa base tạo kết nối này, cho phép bạn gọi hàm khởi tạo của lớp cơ sở hoặc truy cập các phương thức và thuộc tính của lớp đó.

Cách dùng phổ biến nhất của base là gọi hàm khởi tạo của lớp cha. Khi tạo một đối tượng dẫn xuất, bạn có thể truyền giá trị lên lớp cơ sở:

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;
    }
}

Cú pháp : base(name) gọi hàm khởi tạo của Animal trước khi phần thân hàm khởi tạo của Dog chạy. Nhờ vậy, lớp cơ sở được khởi tạo đúng cách trước tiên.

Bạn cũng có thể dùng base để gọi các phương thức của lớp cha bên trong lớp dẫn xuất:

public class Animal
{
    public void Speak()
    {
        Console.WriteLine("Animal sound");
    }
}

public class Dog : Animal
{
    public void Speak()
    {
        base.Speak();  // Gọi phương thức Speak của Animal
        Console.WriteLine("Woof!");
    }
}

Ở đây, base.Speak() gọi rõ ràng phiên bản phương thức của lớp cha. Cách này hữu ích khi bạn muốn mở rộng hành vi của lớp cha thay vì thay thế hoàn toàn hành vi đó.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống quản lý kho sản phẩm để minh họa cách các lớp dẫn xuất dùng từ khóa base để khởi tạo đúng lớp cha và mở rộng hành vi được kế thừa.

Bạn sẽ tạo ba tệp để sắp xếp code:

  • Product.cs: Định nghĩa lớp Product trong không gian tên Inventory. Lớp cơ sở này đại diện cho mọi sản phẩm, với thuộc tính Name (chuỗi) và thuộc tính Price (số thập phân). Thêm hàm khởi tạo nhận cả hai giá trị và phương thức GetInfo() trả về "{Name}: ${Price}".
  • ElectronicProduct.cs: Định nghĩa lớp ElectronicProduct trong không gian tên Inventory, kế thừa từ Product. Lớp này bổ sung thuộc tính WarrantyMonths (số nguyên). Hàm khởi tạo cần nhận tên, giá và số tháng bảo hành, dùng base để truyền tên và giá cho hàm khởi tạo của lớp cha. Tạo phương thức GetInfo() trước tiên gọi phương thức GetInfo() của lớp cha bằng base, sau đó thêm " (Warranty: {WarrantyMonths} months)" để mở rộng đầu ra.
  • Program.cs: Trong tệp chính, tạo một ElectronicProduct bằng các giá trị đầu vào và hiển thị đầy đủ thông tin bằng cách gọi GetInfo().

Bạn sẽ nhận ba giá trị đầu vào:

  • Tên sản phẩm
  • Giá
  • Số tháng bảo hành

In ra kết quả gọi GetInfo() trên sản phẩm điện tử của bạn.

Ví dụ: nếu các giá trị đầu vào là Laptop, 999.99 và 24, đầu ra sẽ là:

Laptop: $999.99 (Warranty: 24 months)

Hãy chú ý cách lớp dẫn xuất dựa trên đầu ra của lớp cơ sở thay vì lặp lại logic. Từ khóa base giúp bạn tái sử dụng và mở rộng hành vi của lớp cha một cách liền mạch!

Tự làm thử

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // Đọc dữ liệu đầu vào
        string name = Console.ReadLine();
        decimal price = Convert.ToDecimal(Console.ReadLine());
        int warrantyMonths = Convert.ToInt32(Console.ReadLine());

        // TODO: Tạo một ElectronicProduct bằng các giá trị đầu vào
        
        // TODO: In ra kết quả khi gọi GetInfo() trên ElectronicProduct bạn vừa tạo
        
    }
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch C# online