Tính đa hình trong C#

0
125

Đa hình có nhiều hình thức về nghĩa. Trong mô hình lập trình hướng đối tượng, đa hình thường được hiểu là “một giao diện, nhiều chức năng”.

Đa hình có thể là tĩnh hoặc động. Trong đa hình tĩnh, sự đáp lại với một chức năng được xác định tại thời gian biên dịch. Trong đa hình năng động, nó được quyết định tại thời gian chạy.

Đa hình tĩnh

Cơ chế liên kết một hàm với một đối tượng trong thời gian biên dịch được gọi là ràng buộc đầu. Nó cũng được gọi là ràng buộc tĩnh. C # cung cấp hai kỹ thuật để thực hiện đa hình tĩnh. Đó là:

  • Nạp chồng hàm
  • Nạp chồng toán tử

Chúng ta sẽ nghiên cứu nạp chồng toán tử ở bài viết sau.

Nạp chồng hàm

Bạn có thể có nhiều định nghĩa cho các hàm cùng tên trong cùng một phạm vi. Các định nghĩa của hàm phải khác nhau về loại hoặc số lượng của các đối số trong danh sách đối số. Bạn không có thể nạp chồng hàm mà chỉ khác nhau bởi kiểu trả về.

Ví dụ sau đây cho thấy cách sử dụng hàm printf() để in các loại dữ liệu khác nhau:

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra các kết quả như sau:

Đa hình động

C # cho phép bạn tạo các lớp trừu tượng được sử dụng để đóng góp một phần cho lớp hoàn chỉnh. Các lớp trừu tượng chứa các phương thức trừu tượng, được thực hiện bởi các lớp dẫn xuất. Các lớp dẫn xuất có chức năng chuyên biệt hơn.

Dưới đây là các quy tắc về các lớp trừu tượng:

  • Bạn không thể tạo một thể hiện của một lớp trừu tượng
  • Bạn không thể khai báo một phương thức trừu tượng bên ngoài một lớp trừu tượng
  • Khi một lớp được khai báo sealed, nó không thể được kế thừa, lớp trừu tượng không thể được khai báo sealed.

Chương trình sau đây giới thiệu một lớp trừu tượng:

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra các kết quả như sau:

Khi bạn có một hàm được định nghĩa trong một lớp mà bạn muốn được thực hiện trong một lớp kế thừa , bạn sử dụng hàm ảo. Hàm ảo có thể được thực hiện khác nhau trong các lớp kế thừa khác nhau và việc gọi đến các hàm này sẽ được quyết định tại thời gian chạy.

Đa hình động được thực hiện bởi abstract classesvirtual functions.

Chương trình sau đây chứng tỏ điều này:

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra các kết quả như sau:

Chúc bạn thành công !

LEAVE A REPLY