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

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

Đang tải... (xem toàn văn)

Thông tin tài liệu

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 1 Phương th Phương th ứ ứ c c ả ả o v o v à à t t í í nh đa h nh đa h ì ì nh nh Virtual method & Polymorphism Virtual method Virtual method & Polymorphism & Polymorphism OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 2 T T í í nh đa h nh đa h ì ì nh nh ¾ ¾ Hai đ Hai đ ặ ặ c đi c đi ể ể m m m m ạ ạ nh nh nh nh ấ ấ t c t c ủ ủ a k a k ế ế th th ừ ừ a đ a đ ó ó l l à à kh kh ả ả năng s năng s ử ử d d ụ ụ ng l ng l ạ ạ i mã chương tr i mã chương tr ì ì nh v nh v à à đa đa h h ì ì nh (polymorphism). nh (polymorphism). ¾ ¾ Đa h Đa h ì ì nh l nh l à à ý tư ý tư ở ở ng ng “ “ s s ử ử d d ụ ụ ng m ng m ộ ộ t giao di t giao di ệ ệ n n chung cho nhi chung cho nhi ề ề u phương th u phương th ứ ứ c kh c kh á á c nhau c nhau ” ” , , d d ự ự a trên phương th a trên phương th ứ ứ c c ả ả o (virtual method). o (virtual method). ¾ ¾ N N ó ó i c i c á á ch kh ch kh á á c, c, T T í í nh đa h nh đa h ì ì nh cho ph nh cho ph é é p m p m ộ ộ t t thao t thao t á á c c c c ó ó c c á á c c c c á á ch x ch x ử ử lý kh lý kh á á c nhau trên c nhau trên c c á á c đ c đ ố ố i tư i tư ợ ợ ng kh ng kh á á c nhau. c nhau. OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 3 Đi Đi ề ề u ki u ki ệ ệ n c n c à à i đ i đ ặ ặ t T t T í í nh đa h nh đa h ì ì nh nh ¾ ¾ Đ Đ ể ể th th ự ự c hi c hi ệ ệ n đư n đư ợ ợ c t c t í í nh đa h nh đa h ì ì nh ta ph nh ta ph ả ả i th i th ự ự c c hi hi ệ ệ n c n c á á c bư c bư ớ ớ c sau: c sau:   L L ớ ớ p cơ s p cơ s ở ở đ đ á á nh d nh d ấ ấ u phương th u phương th ứ ứ c c ả ả o b o b ằ ằ ng ng t t ừ ừ kh kh ó ó a a virtual virtual ho ho ặ ặ c c abstract abstract   C C á á c l c l ớ ớ p d p d ẫ ẫ n xu n xu ấ ấ t đ t đ ị ị nh ngh nh ngh ĩ ĩ a l a l ạ ạ i phương i phương th th ứ ứ c c ả ả o n o n à à y y ( ( đ đ á á nh d nh d ấ ấ u b u b ằ ằ ng t ng t ừ ừ kh kh ó ó a a override override ) ) ¾ ¾ Nhưng Nhưng , n , n h h ữ ữ ng th ng th à à nh viên nh viên (member fields) (member fields) or or nh nh ữ ữ ng thu ng thu ộ ộ c c t t í í nh (properties) nh (properties) v v à à nh nh ữ ữ ng h ng h à à m m t t ĩ ĩ nh nh (static) (static) th th ì ì không đư không đư ợ ợ c khai b c khai b á á o o Virtual Virtual OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 4 Tham chi Tham chi ế ế u gi u gi ữ ữ a l a l ớ ớ p cơ s p cơ s ở ở v v à à l l ớ ớ p d p d ẫ ẫ n xu n xu ấ ấ t t ¾ ¾ Tham chi Tham chi ế ế u thu u thu ộ ộ c c base class base class c c ó ó th th ể ể tr tr ỏ ỏ đ đ ế ế n n object object thu thu ộ ộ c c derived class derived class v v à à c c ó ó th th ể ể truy c truy c ậ ậ p p virtual method virtual method đã define l đã define l ạ ạ i trong i trong derived class derived class ¾ ¾ N N ế ế u tham chi u tham chi ế ế u n u n à à y tr y tr ỏ ỏ t t ớ ớ i i object object thu thu ộ ộ c c base base class class th th ì ì virtual method virtual method c c ủ ủ a l a l ớ ớ p cơ s p cơ s ở ở đư đư ợ ợ c c th th ự ự c hi c hi ệ ệ n. n. ¾ ¾ N N ế ế u tham chi u tham chi ế ế u n u n à à y tr y tr ỏ ỏ t t ớ ớ i i object object thu thu ộ ộ c c derived class derived class th th ì ì virtual method virtual method đã đư đã đư ợ ợ c c derived class derived class đ đ ị ị nh ngh nh ngh ĩ ĩ a l a l ạ ạ i đư i đư ợ ợ c th c th ự ự c hi c hi ệ ệ n. n. OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com VD: minh h VD: minh h ọ ọ a a class class Tau Tau { { public public void void LayThongtin() LayThongtin() { { Console.WriteLine( Console.WriteLine( “ “ Day la chiec Tau Day la chiec Tau ” ” ); ); } } } } 5 ¾ ¾ Ta xay d Ta xay d ự ự ng 3 class: ng 3 class: 9 9 L L ớ ớ p p Tau Tau l l à à l l ớ ớ p cơ s p cơ s ở ở 9 9 L L ớ ớ p p TauChien TauChien v v à à TauChoHang TauChoHang l l à à l l ớ ớ p d p d ẫ ẫ n n xu xu ấ ấ t t t t ừ ừ l l ớ ớ p Tau p Tau OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com VD: VD: 6 class class TauChien : Tau TauChien : Tau { { public public void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Chien Day la tau Chien ” ” ); ); } } } } class class TauChoHang : Tau TauChoHang : Tau { { public public void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Cho Hang Day la tau Cho Hang ” ” ); ); } } } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com VD: VD: 7 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.com VD: VD: 8 Nhưng Nhưng ở ở đây ta chưa th đây ta chưa th ấ ấ y đư y đư ợ ợ c t c t í í nh đa nh đa h h ì ì nh g nh g ì ì h h ế ế t trong l t trong l ậ ậ p tr p tr ì ì nh hư nh hư ớ ớ ng đ ng đ ố ố i tư i tư ợ ợ ng. ng. Dau la chiec Tau Dau la tau Chien Dau la tau Cho Hang K K ế ế t qu t qu ả ả xu xu ấ ấ t ra: t ra: OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com N N ế ế u ta khai b u ta khai b á á o 3 o 3 object đ object đ ề ề l l à à l l ớ ớ p Tau p Tau 9 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.com VD: VD: 10 Ta đã th Ta đã th ấ ấ y đư y đư ợ ợ c t c t í í nh đa h nh đa h ì ì nh, n nh, n hưng hưng chưa đ chưa đ ầ ầ y đ y đ ủ ủ do vi do vi ệ ệ c k c k ế ế t xu t xu ấ ấ t ra nh t ra nh ữ ữ ng k ng k ế ế t t không mong mu không mong mu ố ố n n Dau la chiec Tau Dau la chiec Tau Dau la chiec Tau K K ế ế t qu t qu ả ả xu xu ấ ấ t ra: t ra: OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com VD: VD: Đa h Đa h ì ì nh nh class class Tau Tau { { public virtual void public virtual void LayThongtin() LayThongtin() { { Console.WriteLine( Console.WriteLine( “ “ Day la chiec Tau Day la chiec Tau ” ” ); ); } } } } 11 ¾Để 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ở từ khóa override cho tương ứng lớp dẫn xuất OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com VD: VD: 12 class class TauChien:Tau TauChien:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Chien Day la tau Chien ” ” ); ); } } } } class class TauChoHang:Tau TauChoHang:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Cho Hang Day la tau Cho Hang ” ” ); ); } } } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com VD: VD: class class Program { Program { static void static void Main(string[] args) Main(string[] args) { { Tau a = Tau a = new new Tau(); Tau(); Tau b = Tau b = new new TauChien(); TauChien(); Tau c = Tau c = new new TauChoHang(); TauChoHang(); a.LayThongTin(); a.LayThongTin(); b.LayThongTin(); b.LayThongTin(); c.LayThongTin(); c.LayThongTin(); } } } } 13 Day la chiec Tau Day la tau Chien Day la tau Cho Hang OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com VD: VD: th th ể ể hi hi ệ ệ n t n t í í nh đa h nh đa h ì ì nh nh 14 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; i<3; i++) t[i].LayThongTin(); } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com class Parent { public int A() { return ( B() *C() ); } public virtual int B() { return 1 ; } public int C() { return 2 ; } } class Child : Parent { public override int B() { Return 3 ; } } class Program { static void Main() { Child o = new Child(); Console.WriteLine( o.A() ); } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 16 Q&A Q&A B B à à i t i t ậ ậ p: p: 1. 1. Đ Đ ọ ọ c l c l ạ ạ i b i b à à i gi i gi ả ả ng ng 2. L 2. L à à m c m c á á c b c b à à i VD & b i VD & b à à i t i t ậ ậ p trong GT p trong GT 3. 3. Đ Đ ọ ọ c b c b à à i: i: Tr Tr ừ ừ u tư u tư ợ ợ ng ng 16 . OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 1 Phương th Phương th ứ ứ c c ả ả o v o v à à t t í í nh đa h nh đa h ì ì nh nh Virtual method & Polymorphism Virtual method Virtual. s ử ử d d ụ ụ ng l ng l ạ ạ i mã chương tr i mã chương tr ì ì nh v nh v à à đa đa h h ì ì nh (polymorphism). nh (polymorphism). ¾ ¾ Đa h Đa h ì ì nh l nh l à à ý tư ý tư ở ở ng ng “ “ s s ử ử d d ụ ụ ng. di ệ ệ n n chung cho nhi chung cho nhi ề ề u phương th u phương th ứ ứ c kh c kh á á c nhau c nhau ” ” , , d d ự ự a trên phương th a trên phương th ứ ứ c c ả ả o (virtual method). o (virtual

Ngày đăng: 29/06/2014, 02:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan