You are on page 1of 8

Phng thc o v tnh a hnh

Virtual method & Polymorphism

OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

Tnh a hnh

Hai c im mnh nht ca k tha l kh nng s dng li m chng trnh v a hnh (polymorphism). a hnh l tng s dng mt giao din chung cho nhiu phng thc khc nhau, da trn phng thc o (virtual method). Ni cch khc, Tnh a hnh cho php mt thao tc c cc cch x l khc nhau trn cc i tng khc nhau.

OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

iu kin ci t Tnh a hnh thc hin c tnh a hnh ta phi thc hin cc bc sau: Lp c s nh du phng thc o bng t kha virtual hoc abstract Cc lp dn xut nh ngha li phng thc o ny (nh du bng t kha override) Nhng, nhng thnh vin (member fields) or nhng thuc tnh (properties) v nhng hm tnh (static) th khng c khai bo Virtual

OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

Tham chiu gia lp c s v lp dn xut Tham chiu thuc base class c th tr n object thuc derived class v c th truy cp virtual method define li trong derived class Nu tham chiu ny tr ti object thuc base class th virtual method ca lp c s c thc hin. Nu tham chiu ny tr ti object thuc derived class th virtual method c derived class nh ngha li c thc hin.

OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

VD: minh ha Ta xay dng 3 class: Lp Tau l lp c s Lp TauChien v TauChoHang l lp dn xut t lp Tau class Tau { public void LayThongtin() { Console.WriteLine(Day la chiec Tau); } }
5 OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

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: Phm nh Sc dinhsac@gmail.com

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(); } }
// Mn hnh s xut hin iu g?
7 OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

VD: Kt qu xut ra: Dau la chiec Tau Dau la tau Chien Dau la tau Cho Hang

Nhng y ta cha thy c tnh a hnh g ht trong lp trnh hng i tng.

OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

Nu ta khai bo 3 object l lp Tau 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(); } }
// Mn hnh s xut hin iu g?
9 OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

VD:

Kt qu xut ra:

Dau la chiec Tau Dau la chiec Tau Dau la chiec Tau

Ta thy c tnh a hnh, nhng cha y do vic kt xut ra nhng kt khng mong mun

10

OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

VD: a hnh khc phc tnh trng trn ta phi dng t kha virtual cho phng thc ca lp c s v t kha override cho tng ng lp dn xut class Tau { public virtual void LayThongtin() { Console.WriteLine(Day la chiec Tau); } }
11 OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

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); } }

12

OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

VD: 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(); } }
13

Day la chiec Tau Day la tau Chien Day la tau Cho Hang
OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

VD: th hin tnh a hnh 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(); } }
14 OOP in C# - GV: Phm nh Sc 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: Phm nh Sc dinhsac@gmail.com

Q&A

Bi tp: 1. c li bi ging 2. Lm cc bi VD & bi tp trong GT 3. c bi: Tru tng


16 16 OOP in C# - GV: Phm nh Sc dinhsac@gmail.com

You might also like