Nạp chồng toán tử trong C#

Operator Overloading là Nạp chồng toán tử. Bạn có thể tái định nghĩa hoặc nạp chồng hầu hết các toán tử có sẵn trong C#. Vì thế, một lập trình viên có thể sử dụng các toán tử với các kiểu tự định nghĩa (user-defined). Các toán tử được nạp chồng trong C# là các hàm với các tên đặc biệt: từ khóa operator được theo sau bởi biểu tượng cho toán tử đang được định nghĩa. Tương tự như bất kỳ hàm nào khác, một toán tử được nạp chồng có một kiểu trả về và một danh sách tham số.

Ví dụ, bạn xét hàm sau:

Hàm trên triển khai toán tử cộng (+) cho một lớp Box tự định nghĩa (user-defined). Nó cộng các thuộc tính của hai đối tượng Box và trả về đối tượng kết quả Box.

Triển khai Nạp chồng toán tử trong C#

Ví dụ dưới đây minh họa cách triển khai nạp chồng toán tử trong C#: tạo hai lớp có tên lần lượt là Box, TestCsharp như sau:

Lớp Box: chứa các thuộc tính và phương thức

Lớp TestCsharp: chứa phương thức main() để thao tác trên đối tượng Box

Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

Nạp chồng toán tử trong C#

Toán tử có thể nạp chồng và không thể nạp chồng trong C#

Bảng dưới miêu tả các toán tử có thể nạp chồng trong C#:

Toán tử Miêu tả
+, -, !, ~, ++, — Những toán tử một ngôi này nhận một toán hạng và có thể được nạp chồng
+, -, *, /, % Những toán tử nhị phân này nhận một toán hạng và có thể được nạp chồng
=, !=, <, >, <=, >= Các toán tử so sánh có thể được nạp chồng
&&, || Các toán tử logic điều kiện không thể được nạp chồng một cách trực tiếp
+=, -=, *=, /=, %= Các toán tử gán không thể được nạp chồng
=, ., ?:, ->, new, is, sizeof, typeof Các toán tử này không thể được nạp chồng

Ví dụ

Từ các khái niệm trên, chúng ta kế thừa ví dụ trên và nạp chồng thêm một số toán tử trong C#: ở trên chúng ta đã tạo hai lớp Box, TestCsharp, bây giờ chúng ta sửa lại code của mỗi lớp như sau:

Lớp Box: chứa các thuộc tính và phương thức

Lớp TestCsharp: chứa phương thức main() để thao tác trên đối tượng Box

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

Nạp chồng toán tử trong C#

Đánh giá của bạn

Nhận xét