Lập trình C#

Override trong lập trình C#

Override trong lập trình C#
Được viết bởi Minh Hoàng

Series lập trình C#, ngôn ngữ lập trình hiện đại và mạnh mẽ.

Trong OOP (Object Oriented Programming), overridingoverloading là 2 kỹ thuật giúp tạo nên Tính đa hình (Polymorphism), một trong những sức mạnh của lập trình hướng đối tượng. Trước hết ở bài viết này chúng ta sẽ tìm hiểu về kỹ thuật overriding:

  1. Override là gì?
  2. Đặc điểm của override
  3. Minh họa cách sử dụng
1. Override là gì?
1. Override là gì?

Override(ghi đè): được sử dụng khi bạn muốn thay đổi hành vi(behavior) của một phương thức(method) ở lớp cha(base class) trong lớp con(derived class).

– Nôm na là: giả sử có một phương thức trong lớp cha khi chạy nó sẽ output ra kết quả là A, nhưng theo một logic nào đó, bạn muốn khi chạy phương thức này ở lớp con sẽ output ra kết quả là B. Khi đó bạn dùng đến từ khóa override.

2. Đặc điểm của override
2. Đặc điểm của override

Override chỉ xảy ra giữa các lớp có quan hệ kế thừa.

– Phương thức được override (ở lớp cha) và phương thức override (ở lớp con) phải giống hệt nhau ở cả 3 phần: kiểu dữ liệu trả về, tên phương thức và danh sách tham số.

– Chỉ có thể override các phương thức có quyền truy cập(access modifier) là public hoặc protected. Và nó không thể thay đổi được access modifier của method mà nó override (method được override và method override phải cùng access modifier).

– Từ khóa override được sử dụng để implement một inherited method, property, indexer hoặc event khi nó được dùng kèm với từ khóa abstract hoặc virtual.

– Không thể override một static method, hoặc non-virtual method.

– Không thể sử dụng các modifiers như new, static, virtual cho override method.

– Không thể override constructor.

3. Minh họa cách sử dụng
3. Minh họa cách sử dụng

– Ví dụ bạn có một lớp động vật Animal, có phương thức là Speak() như sau:

[code language=”csharp” highlight=”3″] class Animal
{
public virtual void Speak()
{
Console.WriteLine( "Tiếng kêu động vật!!!" );
}
}
[/code]

– Bây giờ, bạn có một con pet cụ thể chẳng hạn như là Dog kế thừa từ lớp động vật Animal, với tiếng kêu cụ thể là Go go thì lúc này sẽ override lại method Speak() của lớp cha:

[code language=”csharp” highlight=”3″] class Dog : Animal
{
public override void Speak()
{
Console.WriteLine( "Go go." );
}
}
[/code]

– Và, bạn có một con pet khác là Cat cũng kế thừa từ lớp động vật Animal, nhưng không override lại method Speak() của lớp cha:

[code language=”csharp”] class Cat : Animal
{

}
[/code]

– Lúc này, nếu bạn khởi tạo 2 đối tượng dog và cat thực hiện in ra tiếng kêu của mỗi con:

[code language=”csharp”] Animal dog = new Dog();
Animal cat = new Cat();

dog.Speak();
cat.Speak();
[/code]

– Thì chúng ta sẽ được kết quả là:

Go go.

Tiếng kêu động vật!!!

– Như vậy, các bạn có thể thấy con dog “ghi đè” lên hành động tiếng kêu của động vật thì sẽ được tiếng kêu của nó. Còn con cat không làm gì thì tiếng kêu của nó sẽ là tiếng kêu chung chung của lớp cha nó.

Cảm ơn bạn đã theo dõi. Đừng ngần ngại hãy cùng thảo luận với chúng tôi!

Giới thiệu

Minh Hoàng

Xin chào, tôi là Hoàng Ngọc Minh, hiện đang làm BrSE, tại công ty Toyota, Nhật Bản. Những gì tôi viết trên blog này là những trải nghiệm thực tế tôi đã đúc rút ra được trong cuộc sống, quá trình học tập và làm việc. Các bài viết được biên tập một cách chi tiết, linh hoạt để giúp bạn đọc có thể tiếp cận một cách dễ dàng nhất. Hi vọng nó sẽ có ích hoặc mang lại một góc nhìn khác cho bạn[...]

Translate »