TOC

This article is currently in the process of being translated into Vietnamese (~99% done).

Classes:

Inheritance

Một trong những khía cạnh chính của lập trình hướng đối tượng (OOP) mà C# được xây dựng là thừa kế, đó là khả năng tạo các lớp thừa kế từ các lớp cha. Toàn bộ .NET framework được xây dựng trên khái niệm này, đó là "mọi thứ đều là đối tượng". Thậm chí một số đơn giản cũng là thể hiện của một lớp, thừa kế từ lớp System.Object, mặc dù .NET giúp bạn có thể gán số trực tiếp thay vì tạo ra thể hiện mới như lớp integer.

Chủ đề này có thể hơi khó hiểu nhưng hãy bắt đầu với ví dụ đơn giản:

public class Animal
{
    public void Greet()
    {
        Console.WriteLine("Hello, I'm some sort of animal!");
    }
}

public class Dog : Animal
{

}

Đầu tiên chúng ta định nghĩa lớp Animal với phương thức đơn giản để in ra lời chảo. Sau đó định nghĩa lớp Dog với dấu :, chúng ta cho phép C# biết rằng lớp Dog thừa kế từ lớp Animal. Điều thú vị ở đây là nó có nghĩa trong thực tế - một con chó rõ ràng là một loài động vật. Hãy thử dùng lớp:

Animal animal = new Animal();
animal.Greet();
Dog dog = new Dog();
dog.Greet();

Nếu bạn chạy ví dụ này, bạn sẽ thấy mặc dù bạn không định nghĩa phương thức Greet() trong lớp Dog, nó vẫn chào chúng ta vì nó được thừa kế từ lớp Animal. Tuy nhiên, lời chào này hơi không rõ ràng, vì vậy hãy thay đổi để chúng ta biết loài động vật nào:

public class Animal
{
    public virtual void Greet()
    {
        Console.WriteLine("Hello, I'm some sort of animal!");
    }
}

public class Dog : Animal
{
    public override void Greet()
    {
        Console.WriteLine("Hello, I'm a dog!");
    }
}

Bên cạnh việc thêm vào phương thức trong lớp Dog thì bạn nên lưu ý hai điều: Tôi thêm từ khóa virtual vào phương thức trong lớp Animal, và trong lớp Dog, tôi dùng từ khóa override.

Trong C#, bạn không được phép ghi đè một thành viên của class nếu không phải là thành viên ảo (virtual). Nếu bạn muốn thì bạn vẫn có thể truy nhập phương thức được thừa kế và dùng từ khóa base.

public override void Greet()
{
    base.Greet();
    Console.WriteLine("Yes I am - a dog!");
}

Phương thức không phải thứ duy nhất được thừa kế. Thực tế, nhiều thành viên của class sẽ được thừa kế, bao gồm cả trường và thuộc tính. Chỉ phải nhớ quy tắc phạm vi như đã bàn trong chương trước.

Thừa kế không chỉ từ một lớp - bạn có thể có toàn bộ phân cấp lớp thừa kế. Ví dụ, chúng ta có thể tạo ra một lớp Puppy, thừa kế từ lớp Dog, và thừa kế từ lớp Animal. Những gì bạn không thể làm trong C# là để một lớp thừa kế từ nhiều lớp cùng lúc. Đa thừa kế không được hỗ trợ bởi C#.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!