Danh mục

Phương thức ảo và tính đa hình

Số trang: 8      Loại file: pdf      Dung lượng: 741.95 KB      Lượt xem: 21      Lượt tải: 0    
10.10.2023

Phí tải xuống: 2,000 VND Tải xuống file đầy đủ (8 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Hai đặc điểm mạnh nhất của kế thừa đó là khả năng sử dụng lại mã chương trình và đa hình (polymorphism). Đa hình là ý tưởng “sử dụng một giao diện chung cho nhiều phương thức khác nhau”, dựa trên phương thức ảo (virtual method). Nói cách khác, Tính đa hình cho phép một thao tác có các cách xử lý khác nhau trên các đối tượng khác nhau..Điều kiện cài đặt Tính đa hình Để thực hiện được tính đa hình ta phải thực hiện các bước sau: Lớp cơ sở đánh dấu phương thức ảo bằng từ...
Nội dung trích xuất từ tài liệu:
Phương thức ảo và tính đa hình Phương thức ảo và tính đa hình Virtual method & Polymorphism OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com1 Tính đa hình Hai đặc điểm mạnh nhất của kế thừa đó là Hai khả năng sử dụng lại mã chương trình và đa hình (polymorphism). Đa hình là ý tưởng “sử dụng một giao diện chung cho nhiều phương thức khác nhau”, dựa trên phương thức ảo (virtual method). Nói cách khác, Tính đa hình cho phép một thao tác có các cách xử lý khác nhau trên các đối tượng khác nhau. OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com2 Điều kiện cài đặt Tính đa hình Để thực hiện được tính đa hình ta phải thực hiện các bước sau: Lớp cơ sở đánh dấu phương thức ảo bằng từ khóa virtual hoặc abstract virtual abstract Các lớp dẫn xuất định nghĩa lại phương thức ảo này (đánh dấu bằng từ khóa override) override Nhưng, những thành viên (member fields) or Nh or những thuộc tính (properties) và những hàm tĩnh (static) thì không được khai báo Virtual không Virtual OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com3 Tham chiếu giữa lớp cơ sở và lớp dẫn xuất Tham chiếu thuộc base class có thể trỏ đến Tham object thuộc derived class và có thể truy cập virtual method đã define lại trong derived class Nếu tham chiếu này trỏ tới object thuộc base class thì virtual method của lớp cơ sở được thực hiện. Nếu tham chiếu này trỏ tới object thuộc derived class thì virtual method đã được derived class định nghĩa lại được thực hiện. OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com4 VD: minh họa Ta xay dựng 3 class: Ta Lớp Tau là lớp cơ sở Lớp TauChien và TauChoHang là lớp dẫn xuất từ lớp Tau class Tau { public void LayThongtin() { Console.WriteLine(“Day la chiec Tau”); } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com5 VD: class TauChien : Tau { public void LayThongTin() { Console.WriteLine(“Day la tau Chien ”); } } class TauChoHang : Tau { public void LayThongTin() { Console.WriteLine(“Day la tau Cho Hang”); } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com6 VD: class Program { static void Main(string[] args) { Tau a = new Tau(); TauChien b = new TauChien(); TauChoHang c = new TauChoHang(); a.LayThongTin(); b.LayThongTin(); c.LayThongTin(); } } // Màn hình sẽ xuất hiện điều gì? OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com7 VD: Kết quả xuất ra: Dau la chiec Tau Dau la tau Chien Dau la tau Cho Hang Nhưng ở đây ta chưa thấy được tính đa hình gì hết trong lập trình hướng đối tượng. OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com8 Nếu ta khai báo 3 object đề là lớp Tau object class Program { static void Main(string[] args) { Tau a = new Tau(); Tau b = new TauChien(); Tau c = new TauChoHang(); a.LayThongTin(); b.LayThongTin(); c.LayThongTin(); } } // Màn hình sẽ xuất hiện điều gì? OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com9 VD: Kết quả xuất ra: Dau la chiec Tau Dau la chiec Tau Dau la chiec Tau Ta đã thấy được tính đa hình, nhưng chưa đầy đủ do việc kết xuất ra những kết không mong muốn OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com10 VD: Đa hình Để khắc phục tình trạng trên ta phải dùng từ khóa virtual cho phương thức của lớp cơ sở và từ khóa override cho tương ứng lớp dẫn xuất class Tau { public virtual void LayThongtin() { Console.WriteLine(“Day la chiec Tau”); } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com11 VD: class TauChien:Tau { public override void LayThongTin() { Console.WriteLine(“Day la tau Chien ”); } } class TauChoHang:Tau { public override void LayThongTin() { Console.WriteLine(“Day la tau Cho Hang”); } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com12 VD: class Program { static void Main(string[] args) { Tau a = new Tau(); Tau b = new TauChien(); Tau c = new TauChoHang(); a.LayThongTin(); b.LayThongTin(); Day la chiec Tau Day la tau Chien c.LayThongTin(); Day la tau Cho Hang } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com13 VD: thể hiện tính đa hình class Program { static void Main(string[] args) { Tau [] t = new Tau[3]; t[0] = new Tau(); t[1] = new TauChien(); t[2] = new TauChoHang(); for(int i=0; ...

Tài liệu được xem nhiều: