This article is currently in the process of being translated into Vietnamese (~98% done).
More abstract classes
Trong chương trước, chúng ta đã xem lớp trừu tượng. Trong chương này, chúng ta sẽ mở rộng một chút và tìm hiểu vả phương thức trừu tượng. Phương thức trừu tượng chỉ cho phép trong lớp trừu tượng. Định nghĩa của nó giống phương thức thông thường nhưng không có mã bên trong:
abstract class FourLeggedAnimal
{
public abstract string Describe();
}
Vì vậy tai sao bạn muốn định nghĩa một phương thức mà không thực hiện gì? Do phương thức trừu tượng là bắt buộc phải thực hiện trong mọi lớp con. Thực tế, nó được kiểm tra ở thời gian biên dịch, để đảm bảo rằng lớp con của bạn có thự hiện phươn thức này. Thêm nữa, thật tốt để tạo một lớp cơ sở trong khi vẫn kiểm soát lớp con. Ví dụ:
namespace AbstractClasses
{
class Program
{
static void Main(string[] args)
{
System.Collections.ArrayList animalList = new System.Collections.ArrayList();
animalList.Add(new Dog());
animalList.Add(new Cat());
foreach(FourLeggedAnimal animal in animalList)
Console.WriteLine(animal.Describe());
Console.ReadKey();
}
}
abstract class FourLeggedAnimal
{
public abstract string Describe();
}
class Dog : FourLeggedAnimal
{
public override string Describe()
{
return "I'm a dog!";
}
}
class Cat : FourLeggedAnimal
{
public override string Describe()
{
return "I'm a cat!";
}
}
}
Bạn có thể thấy, chúng ta tạo ra ArrayList chứa động vật. Sau đó chúng ta tạo ra thể hiện chó và mèo và đưa chúng vào danh sách. Chúng được khởi tạo tương ứng là Dog và Cat, nhưng chúng cũng là FourLeggedAnimal, và vì trình biên dịch biết rằng lớp con của lớp đó chứa phương thức Describe(), bạn được phép gọi phương thức đó mà không cần biết chính xác loại động vật. Do đó, ép kiểu sang FourLeggedAnimal, thì có thể dùng vòng lặp foreach và truy cập vào từng thành viên của lớp con. Nó rất hữu ích trong nhiều kịch bản.