- vừa được xem lúc

Overriding và Overloading trong C# khác nhau như thế nào?

0 0 1

Người đăng: Thành Nguyễn Văn

Theo Viblo Asia

Mở đầu

Phân loại về tính đa hình (Polymorphism)

  • Cùng mình nhắc lại một chút về tính đa hình: đây là tính chất cho phép một phương thức có nhiều cách thể hiện khác nhau ứng với từng đối tượng khác nhau.

  • Nghe định nghĩa có vẻ các bạn vẫn chưa hình dung rõ ràng được 🙃. Cùng mình phân tích tiếp để có cái nhìn chi tiết hơn về việc: khi nào là đa hình theo Overriding, khi nào là đa hình theo Overloading nhé.

Overrding và Overloading được sử dụng ứng với method (function) trong class.

1. Overriding method

  • Overriding cho phép class con định nghĩa lại phương thức đã có trong class cha.

Overriding là runtime polymorphism

csharp public class Animal
{ public virtual void Speak() { Console.WriteLine("Some generic animal sound"); }
} public class Dog : Animal
{ public override void Speak() { Console.WriteLine("Woof!"); }
} public class Cat : Animal
{ public override void Speak() { Console.WriteLine("Meow!"); }
}
  • Ở trên là một ví dụ về overriding method.
  • Lớp Animal định nghĩa một method: Speak với từ khóa virtual cho phép ghi đề (override) ở class con.
  • 2 class con là DogCat đều kế thừa method: Speak với từ khóa override giúp phương thức được gọi chính xác trong quá trình thực thi (runtime).
csharp Animal myAnimal; myAnimal = new Dog();
myAnimal.Speak(); // In ra "Woof!" myAnimal = new Cat();
myAnimal.Speak(); // In ra "Meow!"
  • Mặc dù myAnimal có kiểu Animal, nhưng nhờ override method, C# sẽ gọi đúng phương thức của class thực tế (Dog/Cat) vào thời điểm runtime.

Điều kiện để xảy ra overriding method:

  • Chỉ xảy ra khi class con kế thừa class chacả 2 class có phương thức giống nhau hoàn toàn về: tên, kiểu dữ liệu trả về và tham số truyền vào.
  • Method trong class cha phải dùng từ khóa virtual
  • Method trong class con dùng từ khóa override

2. Overloading method

  • Overloading cho phép các method có tên giống nhau trong cùng một class.

Overloading là compile-time polymorphism.

csharp public class Calculator
{ public int Add(int a, int b) { return a + b; } public double Add(double a, double b) { return a + b; } public int Add(int a, int b, int c) { return a + b + c; }
}
  • Ở trên là một ví dụ về Overloading method.
  • lớp Calculator có 3 method: Add nhưng mỗi method có tham số hoặc kiểu trả về khác nhau.
csharp var calc = new Calculator(); Console.WriteLine(calc.Add(2, 3)); // Gọi int Add(int, int)
Console.WriteLine(calc.Add(2.5, 3.2)); // Gọi double Add(double, double)
Console.WriteLine(calc.Add(1, 2, 3)); // Gọi int Add(int, int, int)
  • Khi C# biên dịch chương trình thì các phương thức này dù cùng tên gọi nhưng đã được phân biệt dựa trên danh sách tham số truyền vào và kiểu trả về.

Điều kiện để xảy ra Overloading method:

  • Các method có tên giống nhau được định nghĩa trong cùng một class.
  • Các method này bắt buộc: có kiểu dữ liệu trả về hoặc tham số truyền vào khác nhau.

Kết luận

  • Đa hình là một tính chất vô cùng quan trọng trong lập trình hướng đối tượng (OOP).
  • Qua bài viết mình đã phân tích về 2 phân loại quan trọng của tính chất đa hình là: Overriding và Overloading.
  • Việc nắm rõ về kiến thức này, khi áp dụng vào trong thực tế thì sẽ giúp cho mã nguồn trở nên mềm mại, linh hoạt trong việc thay đổi nhưng bên cạnh đó vẫn giữ được tính tường minh, dễ hiểu, dễ mở rộng mà còn dễ dàng debug nữa 🤩.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Các loại tham chiếu Nullable trong C# (Phần 1)

1. Giới thiệu. C# 8.0 giới thiệu kiểu tham chiếu nullable và kiểu tham chiếu non-nullable cho phép bạn đưa ra các lựa chọn quan trọng về thuộc tính cho các biến kiểu tham chiếu:.

0 0 55

- vừa được xem lúc

Command pattern qua ví dụ !

Command pattern là gì . Command pattern khá phổ biến trong C #, đặc biệt khi chúng ta muốn trì hoãn hoặc xếp hàng đợi việc thực hiện một yêu cầu hoặc khi chúng ta muốn theo dõi các hoạt động. Hơn nữa, chúng ta có thể hoàn tác tác chúng. .

0 0 194

- vừa được xem lúc

Hiểu Liskov Substitution Principle qua ví dụ !

Liskov Substitution Principle là gì . Nguyên tắc đóng mở xác đinh rằng các instance của lớp con có thể thay thế được instance lớp cha mà vẫn đảm bảo tính đúng đắn của chương trình.

0 0 38

- vừa được xem lúc

Creating custom Controls Wpf

Introduction. Wpf/winforms provides various controls like Buttons, Textbox, TextBlock, Labels etc.

0 0 57

- vừa được xem lúc

[P1] Chọn công nghệ nào để xây dựng website?

Hiện nay nhu cầu phát triển website, app tăng rất cao do xu hướng "số hóa 4.0" trong và ngoài nước.

0 0 86

- vừa được xem lúc

Kiểu dữ liệu trong C#

Dẫn nhập. Ở bài BIẾN TRONG C# chúng ta đã tìm hiểu về biến và có một thành phần không thể thiếu khi khai báo biến – Đó là kiểu dữ liệu.

0 0 40