Override trong C#

Overrider method (ghi đè) là cách giúp lớp con thay đổi phương thức được kế thừa từ lớp cha. Tức là tạo một phương thức có số lượng tham số và kiểu trả về giống y hệt lớp cha.

Để có thể ghi đè bạn phải đặt từ khóa virtual trong phương thức của lớp cha bạn cho phép ghi đè. Nếu phương thức trong lớp cha không có từ khóa virtual bạn phải sử dụng từ khóa new trong lớp con để override phương thức đó.

Ví dụ:

class DongVat
{
    //lớp con chỉ có thể ghi đè với những phương thức có từ khóa virtual ở lớp cha.
    public virtual void An(string ten)
    {
        Console.WriteLine("lop cha dang an " + ten);
    }

    //lớp con không thể ghi đè với những phương thức không có từ khóa virtual
    public void Ngu()
    {
        Console.WriteLine("dang ngu, ai cho ghi de");
    }

    public void Tho()
    {
        Console.WriteLine("lop cha dang hit tho");
    }

}
class Heo : DongVat
{
    //lớp con chỉ có thể ghi đè với những phương thức có từ khóa virtual ở lớp cha
    public override void An(string ten)
    {
        Console.WriteLine("heo dang an " + ten);
    }
    //để ghi đè lớp con với những phương thức không có từ khóa virutal của lớp cha, 
    //ta dùng từ khóa new ở lớp con
    public  new void Ngu()
    {
        Console.WriteLine("heo dang ngu");
    }

    public void Tho()
    {
        Console.WriteLine("heo dang hit tho");
    }
 
}
static void Main(string[] args)
{
    Heo heo = new Heo();
    heo.An("tap");
    heo.Ngu();
    heo.Tho();
    Console.ReadLine();
}
 

Nhận xét:

Phương thức an ở lớp cha, có từ khóa virtual, nên chúng ta có thể override nó.

Phương thức Ngu của lớp cha không có từ khóa virtual, nên khi sử dụng ở lớp con ta thêm từ khóa new để override nó..

Phương thức HitTho ở lớp cha không có từ khóa virtual, khi override ở lớp con ta không thêm từ khóa new vào, visual studio sẽ hiện ra cảnh báo.

cảnh báo

Lưu ý: nên dùng virual và override để ghi đè phương thức hơn là dùng new. Khi dùng override và virual ta có thể kiểm soát được phương thức nào đang được ghi đè và cho ghi đè.

Nếu dùng từ khóa override trước một phương thức ở C#, nó sẽ hiện ra danh sách các phương thức được quyền override .

Như trong ví dụ trên khi bấm override ta sẽ thấy ta có thể ghi đè phương thức An, Equal, GetHashCode, ToString.

An thì quá rõ ràng rôì, nó được kế thừa từ lớp Động Vật , còn ba phương thức Equals, GetHash, ToString ở đâu ra ?

Trả lời, mọi lớp trong C# đều kế thừa từ một lớp Object, đây là 3 phương thức cơ bản của lớp Object do vậy nó có thể ghi đè 3 phương thức này.

Các môn học khác

Khóa học này cung cấp cho ta kiến thức nền tảng về công nghệ Blockchain, Bitcoin. Vì sao nó được gọi là công nghệ của tương lai, vì sao giá Bitcoin lại cao đến vậy. Làm sao để mua Bitcoin, ETH.

HTTP giúp kết nối các máy tính trên mạng Internet thông qua TCP/IP

Khoa học về dinh dưỡng, giáo trình giảm cân cho mọi người.