Lập trình C#

Sự khác nhau giữa override và overload trong C#

Sự khác nhau giữa override và overload trong 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ẽ.

Khi làm việc với các ngôn ngữ lập trình hướng đối tượng thì hai khái niệm overridingoverloading rất quan trọng và thường sử dụng. Và hai kỹ thuật này 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 các bạn cần nắm hai khái niệm overrideoverload là gì, rồi mới tiếp tục tìm hiểu tiếp nhé:

  1. Override trong lập trình C#
  2. Overload trong lập trình C#

– Trong bài viết này chúng ta sẽ cùng tìm hiểu:

  1. Sự khác nhau giữa override và overload là gì?
  2. Nên sử dụng override, overload khi nào?
1. Sự khác nhau giữa override và overload là gì?
1. Sự khác nhau giữa override và overload là gì?
Override Overload
– Kiểu dữ liệu trả về, tên phương thức, danh sách tham số của phương thức override và phương thức được override phải giống nhau. – Kiểu dữ liệu trả về của các phương thức overload có thể giống nhau hoặc khác nhau.

– Số lượng tham số hoặc kiểu dữ liệu của tham số ở các phương thức overload phải khác nhau.

– Không thể thu hẹp phạm vi truy cập(access modifier) của phương thức được override. – Có thể mở rộng hoặc thu hẹp phạm vi truy cập(access modifier) của phương thức được overload.
– Không thể overriding constructor method. – Overloading được constructor method.
– Chỉ thực hiện được đối với các class có quan hệ kế thừa. Do đó overriding thực hiện ở ngoài phạm vi của một class. – Chỉ thực hiện trong cùng phạm vi, trong nội bộ của một class.
– Là hình thức đa hình khi chạy(runtime) (tức là chỉ khi chương trình chạy, thì chúng ta mới biết phương thức được gọi từ lớp nào). – Là hình thức đa hình khi biên dịch(compiler) (tức là khi biên dịch mới biết đang sử dụng phương thức ở trong lớp nào).
– Không cho phép tạo ra những ngoại lệ khác loại hoặc không phải đối tượng thuộc lớp con của lớp có thể hiện là ngoại lệ từ phương thức được override. – Cho phép tạo ra những ngoại lệ hoàn toàn mới so với những ngoại lệ từ phương thức được overload.
2. Nên sử dụng override, overload khi nào?
2. Nên sử dụng override, overload khi nào?

Sử dụng override khi ở lớp cha có một phương thức thực hiện công việc A, và lớp con khi kế thừa phương thức này nó muốn làm khác đi công việc A đó thì chúng ta sẽ dùng override.

Chẳng hạn, ở lớp cha động vật Animal có phương thức là Eat() { “Động vật ăn cỏ” }, và lớp con cá mập Shark kế thừa method Eat() của lớp động vật, nhưng cá mập thì không ăn cỏ. Do đó mà ở lớp con cá mập chúng ta cần override method Eat() này cho phù hợp là: Eat() { “Cá mập ăn thịt” }.

Sử dụng overload khi chúng ta muốn chỉ sử dụng một tên method cho nhiều xử lý có ý nghĩa tương tự nhau trong cùng một class, để dễ gợi nhớ, tránh trường hợp đặt nhiều tên method khác nhau mà chúng lại có chung xử lý.

Chẳng hạn, chúng ta muốn lấy tên của một sinh viên trong một lớp học thì có thể có nhiều cách lấy như: dựa vào mã sinh viên, địa chỉ email, dựa vào địa chỉ + số điện thoại,… Và khi đó, có thể bạn sẽ viết ra n method để làm việc này như:

  • GetNameByMasv
  • GetNameByEmail
  • GetNameByAddMobi

Như các bạn thấy rằng, nếu có n cách lấy tên sinh viên thì chúng ta phải viết n method để thực hiện. Làm như vậy sẽ có nhiều hạn chế, thay vì thế bạn sử dụng kỹ thuật overload để chỉ cần viết method có tên là GetName với các tham số truyền vào tương ứng.

=> Điều này sẽ giúp phương thức của chúng ta tránh nhầm lẫn, có ý nghĩa và dễ nhớ.

Kết luận:

Overriding, overloading là những tính năng rất quan trọng trong một ngôn ngữ hướng đối tượng như C#. Khi được sử dụng chính xác, chúng sẽ rất hữu ích, mạnh mẽ và làm code dễ đọc, dễ hiểu. Khi chúng ta có các method có chức năng tương tự, không cần phải cung cấp cho chúng các tên khác nhau khi chúng ta có thể overloading chúng. Và khi không hài lòng với các chức năng được cung cấp sẵn của method trong lớp cha, chúng ta có thể overriding method đó để đáp ứng nhu cầu của chúng ta.

– Qua bài này, hy vọng các bạn đã phân biệt được override, overload và biết được khi nào thì nên sử dụng trong C#. Sử dụng overrideoverload không có nghĩa là làm code ngắn hơn, nhưng sẽ làm cho tên phương thức của chúng ta có ý nghĩa và rõ ràng hơ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[...]

1 bình luận

Translate »