OOP in C# - GV: Phm Đình Sc – 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: Phm Đình Sc – 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: Phm Đình Sc – 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
, nh
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: Phm Đình Sc – 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: Phm Đình Sc – 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
9L
L
p
p Tau
Tau l
là
àl
l
p cơ s
p cơ s
9
9L
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: Phm Đình Sc – 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: Phm Đình Sc – 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 sxut hin điu gì?
OOP in C# - GV: Phm Đình Sc – 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: Phm Đình Sc – 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 sxut hin điu gì?
OOP in C# - GV: Phm Đình Sc – 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, như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: