OOP in C# - GV: Phạm Đình Sắc –
1
L
L
ớ
ớ
p tr
p tr
ừ
ừ
u tư
u tư
ợ
ợ
ng v
ng v
à
à
L
L
ớ
ớ
p b
p b
ị
ị
kh
kh
ó
ó
a
a
1
Abstract class
& Sealed class
Abstract class
Abstract class
& Sealed class
& Sealed class
OOP in C# - GV: Phạm Đình Sắc –
2
L
L
ớ
ớ
p tr
p tr
ừ
ừ
u tư
u tư
ợ
ợ
ng
ng
¾
¾
Trong phương th
Trong phương th
ứ
ứ
c
c
ả
ả
o
o
(virtual method):
(virtual method):
l
l
ớ
ớ
p d
p d
ẫ
ẫ
n xu
n xu
ấ
ấ
t không nh
t không nh
ấ
ấ
t thi
t thi
ế
ế
t ph
t ph
ả
ả
i đ
i đ
ị
ị
nh
nh
ngh
ngh
ĩ
ĩ
a l
a l
ạ
ạ
i phương th
i phương th
ứ
ứ
c
c
ả
ả
o
o
¾
¾
Trong l
Trong l
ớ
ớ
p tr
p tr
ừ
ừ
u tư
u t
ư
ợ
ợ
ng
ng
(abstract class):
(abstract class):
Đ
Đ
ể
ể
b
b
ắ
ắ
t bu
t bu
ộ
ộ
c
c
t
t
ấ
ấ
t c
t c
ả
ả
c
c
á
á
c l
c l
ớ
ớ
p d
p d
ẫ
ẫ
n xu
n xu
ấ
ấ
t ph
t ph
ả
ả
i đ
i đ
ị
ị
nh
nh
ngh
ngh
ĩ
ĩ
a l
a l
ạ
ạ
i
i
(
(
override
override
)
)
phương th
phương th
ứ
ứ
c c
c c
ủ
ủ
a l
a l
ớ
ớ
p
p
cơ s
cơ s
ở
ở
v
v
à
à
phương th
phương th
ứ
ứ
c đ
c đ
ó
ó
đư
đư
ợ
ợ
c g
c g
ọ
ọ
i l
i l
à
à
phương th
phương th
ứ
ứ
c tr
c tr
ừ
ừ
u tư
u tư
ợ
ợ
ng (
ng (
abstract
abstract
method
method
)
)
OOP in C# - GV: Phạm Đình Sắc –
3
L
L
ớ
ớ
p tr
p tr
ừ
ừ
u tư
u tư
ợ
ợ
ng
ng
¾
¾
L
L
ớ
ớ
p tr
p tr
ừ
ừ
u tư
u tư
ợ
ợ
ng c
ng c
ó
ó
t
t
ừ
ừ
kh
kh
ó
ó
a
a
abstract trư
abstract trư
ớ
ớ
c
c
t
t
ừ
ừ
class;
class;
VD:
VD:
abstract class
abstract class
Tau
Tau
{ }
{ }
¾
¾
Trong ph
Trong ph
ầ
ầ
n thân c
n thân c
ủ
ủ
a phương th
a phương th
ứ
ứ
c tr
c tr
ừ
ừ
u
u
tư
tư
ợ
ợ
ng không c
ng không c
ó
ó
câu l
câu l
ệ
ệ
nh n
nh n
à
à
o
o
(ch
(ch
ỉ
ỉ
xây
xây
d
d
ự
ự
ng khuôn m
ng khuôn m
ẫ
ẫ
u)
u)
, t
, t
ứ
ứ
c l
c l
à
à
n
n
ó
ó
ch
ch
ỉ
ỉ
c
c
ó
ó
ph
ph
ầ
ầ
n
n
khai b
khai b
á
á
o.
o.
¾
¾
Phương th
Phương th
ứ
ứ
c tr
c tr
ừ
ừ
u tư
u tư
ợ
ợ
ng ph
ng ph
ả
ả
i đư
i đư
ợ
ợ
c đ
c đ
ặ
ặ
t
t
trong l
trong l
ớ
ớ
p tr
p tr
ừ
ừ
u tư
u tư
ợ
ợ
ng
ng
OOP in C# - GV: Phạm Đình Sắc –
4
Phương th
Phương th
ứ
ứ
c tr
c tr
ừ
ừ
u tư
u tư
ợ
ợ
ng
ng
¾
¾
Không th
Không th
ể
ể
t
t
ạ
ạ
o ra đ
o ra đ
ố
ố
i tư
i tư
ợ
ợ
ng (new) t
ng (new) t
ừ
ừ
l
l
ớ
ớ
p
p
tr
tr
ừ
ừ
u tư
u tư
ợ
ợ
ng (abstract class)
ng (abstract class)
¾
¾
C
C
ú
ú
ph
ph
á
á
p phương th
p phương th
ứ
ứ
c tr
c tr
ừ
ừ
u tư
u tư
ợ
ợ
ng:
ng:
public
public
abstract
abstract
void
void
TênPh
ươngTh
TênPhươngTh
ứ
ứ
c( );
c( );
// ho
// ho
ặ
ặ
c
c
abstract
abstract
public
public
void
void
TênPhươngTh
TênPhươngTh
ứ
ứ
c( );
c( );
OOP in C# - GV: Phạm Đình Sắc –
VD: minh h
VD: minh h
ọ
ọ
a
a
5
¾
¾
Ta xây d
Ta xây 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
class
class
Tau
Tau
{
{
public virtual void
public virtual void
LayThongtin()
LayThongtin()
{
{
Console.WriteLine(
Console.WriteLine(
“
“
Day la chiec Tau
Day la chiec Tau
”
”
);
);
}
}
}
}
OOP in C# - GV: Phạm Đình Sắc –
VD:
VD:
6
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 –
VD:
VD:
th
th
ể
ể
hi
hi
ệ
ệ
n t
n t
í
í
nh đa h
nh đa h
ì
ì
nh
nh
7
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 –
VD: minh h
VD: minh h
ọ
ọ
a l
a l
ớ
ớ
p tr
p tr
ừ
ừ
u tư
u tư
ợ
ợ
ng
ng
8
class
class
Tau
Tau
{
{
public
public
abstract
abstract
void
void
LayThongtin()
LayThongtin()
{
{
Console.WriteLine(
Console.WriteLine(
“
“
Day la chiec Tau
Day la chiec Tau
”
”
);
);
}
}
}
}
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
”
”
);
);
}
}
}
} // Error ?
OOP in C# - GV: Phạm Đình Sắc –
VD: minh h
VD: minh h
ọ
ọ
a
a
9
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
”
”
);
);
}
}
}
} // Error ?
abstract
abstract
class
class
Tau
Tau
{
{
public
public
abstract
abstract
void
void
LayThongtin()
LayThongtin()
{
{
Console.WriteLine(
Console.WriteLine(
“
“
Day la chiec Tau
Day la chiec Tau
”
”
);
);
}
}
}
}
OOP in C# - GV: Phạm Đình Sắc –
VD: S
VD: S
ử
ử
a l
a l
ạ
ạ
i VD minh h
i VD minh h
ọ
ọ
a trên
a trên
10
abstract
abstract
class
class
Tau
Tau
{
{
public
public
abstract
abstract
void
void
LayThongtin();
LayThongtin();
}
}
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
”
”
);
);
}
}
}
} // Error ?
OOP in C# - GV: Phạm Đình Sắc –
VD:
VD:
th
th
ể
ể
hi
hi
ệ
ệ
n t
n t
í
í
nh đa h
nh đa h
ì
ì
nh
nh
11
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();
}
} // Are there any error ? Which line do you get error ?
OOP in C# - GV: Phạm Đình Sắc –
S
S
ử
ử
a l
a l
ạ
ạ
i cho đ
i cho đ
ú
ú
ng
ng
12
class Program {
static void Main(string[] args)
{
Tau [] t = new Tau[3];
t[0] = new TauChien();
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 –
Gi
Gi
ả
ả
s
s
ử
ử
ta không xây d
ta không xây d
ự
ự
ng method
ng method
LayThongTin
LayThongTin
trong l
trong l
ớ
ớ
p
p
TauChien
TauChien
13
abstract
abstract
class
class
Tau
Tau
{
{
abstract
abstract
public void
public void
LayThongtin(); }
LayThongtin(); }
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
”
”
);
);
}
}
}
} // Error?
OOP in C# - GV: Phạm Đình Sắc –
VD: kh
VD: kh
á
á
c trang 57 trong gi
c trang 57 trong gi
á
á
o tr
o tr
ì
ì
nh
nh
14
abstract
abstract
public class
public class
HinhHoc
HinhHoc
{
{
abstract
abstract
public double
public double
DienTich();
DienTich();
public
public
virtual
virtual
double
double
ChuVi() {
ChuVi() {
return
return
0 } ;
0 } ;
}
}
¾
¾
Ta xây d
Ta xây d
ự
ự
ng 3 class:
ng 3 class:
9
9
L
L
ớ
ớ
p
p
HinhHoc
HinhHoc
l
l
à
à
l
l
ớ
ớ
p cơ s
p cơ s
ở
ở
9
9
L
L
ớ
ớ
p
p
HinhTron
HinhTron
v
v
à
à
HinhChuNhat
HinhChuNhat
l
l
à
à
l
l
ớ
ớ
p d
p d
ẫ
ẫ
n
n
xu
xu
ấ
ấ
t t
t t
ừ
ừ
l
l
ớ
ớ
p
p
HinhHoc
HinhHoc
OOP in C# - GV: Phạm Đình Sắc –
VD: kh
VD: kh
á
á
c trang 57 trong gi
c trang 57 trong gi
á
á
o tr
o tr
ì
ì
nh
nh
15
class HinhTron : HinhHoc
{ double _bankinh;
public double BanKinh
{
get { return _bankinh; }
set { _bankinh = value; }
}
public override double DienTich()
{
return _bankinh*_bankinh*3.14 ;
}
public override double ChuVi()
{
return _bankinh*2*3.14 ;
}
}
OOP in C# - GV: Phạm Đình Sắc –
Trang 57 trong gi
Trang 57 trong gi
á
á
o tr
o tr
ì
ì
nh
nh
16
Class HinhChuNhat : HinhHoc
{ double _dai, _rong;
public double ChieuDai
{ get { return _dai; }
set { _dai = value; }
}
public double ChieuRong
{ get { return _rong; }
set { _rong = value; }
}
public override double DienTich()
{ return _dai*_rong; }
public override double ChuVi()
{ return (_dai+_rong)*2; }
}
OOP in C# - GV: Phạm Đình Sắc –
Trang 58 trong gi
Trang 58 trong gi
á
á
o tr
o tr
ì
ì
nh
nh
17
static void Main(string[ ] args)
{ HinhHoc h;
HinhTron t = new HinhTron();
t.BanKinh = 5;
Console.WriteLine("\nTHONG TIN HINH TRON");
h = t;
Console.WriteLine("Chu vi hinh tron: {0} ", h.ChuVi());
Console.WriteLine("Dien tich hinh tron:{0} \n", h.DienTich());
HinhChuNhat n = new HinhChuNhat();
n.ChieuDai = 4;
n.ChieuRong = 3;
h = n;
Console.WriteLine("\nTHONG TIN HINH CHU NHAT");
Console.WriteLine("Chu vi hinh chu nhat:{0}", h.ChuVi() );
Console.WriteLine("Dien tich hinh chu nhat:{0}", h.DienTich() );
}
OOP in C# - GV: Phạm Đình Sắc –
18
Ghi ch
Ghi ch
ú
ú
:
:
Phân bi
Phân bi
ệ
ệ
t gi
t gi
ữ
ữ
a t
a t
ừ
ừ
kh
kh
ó
ó
a
a
new
new
v
v
à
à
override
override
¾
¾
T
T
ừ
ừ
kh
kh
ó
ó
a
a
override
override
d
d
ù
ù
ng đ
ng đ
ể
ể
đ
đ
ị
ị
nh ngh
nh ngh
ĩ
ĩ
a l
a l
ạ
ạ
i (
i (
ghi
ghi
đ
đ
è
è
) p
) p
hương th
hương th
ứ
ứ
c
c
ả
ả
o
o
(virtual)
(virtual)
ho
ho
ặ
ặ
c ph
ương
c phương
th
th
ứ
ứ
c tr
c tr
ừ
ừ
u tư
u tư
ợ
ợ
ng
ng
(abstract)
(abstract)
c
c
ủ
ủ
a l
a l
ớ
ớ
p cơ s
p cơ s
ở
ở
, n
, n
ó
ó
đư
đư
ợ
ợ
c d
c d
ù
ù
ng v
ng v
ớ
ớ
i m
i m
ụ
ụ
c đ
c đ
í
í
ch đa h
ch đa h
ì
ì
nh.
nh.
¾
¾
T
T
ừ
ừ
kh
kh
ó
ó
a
a
new
new
đ
đ
ể
ể
che d
che d
ấ
ấ
u th
u th
à
à
nh viên c
nh viên c
ủ
ủ
a l
a l
ớ
ớ
p
p
cơ s
cơ s
ở
ở
tr
tr
ù
ù
ng tên v
ng tên v
ớ
ớ
i th
i th
à
à
nh viên c
nh viên c
ủ
ủ
a l
a l
ớ
ớ
p d
p d
ẫ
ẫ
n
n
xu
xu
ấ
ấ
t.
t.
OOP in C# - GV: Phạm Đình Sắc –
19
L
L
ớ
ớ
p cô l
p cô l
ậ
ậ
p (sealed class)
p (sealed class)
¾
¾
L
L
ớ
ớ
p cô l
p cô l
ậ
ậ
p l
p l
à
à
l
l
ớ
ớ
p
p
không cho c
không cho c
á
á
c l
c l
ớ
ớ
p kh
p kh
á
á
c k
c k
ế
ế
th
th
ừ
ừ
a t
a t
ừ
ừ
n
n
ó
ó
¾
¾
C
C
ú
ú
ph
ph
á
á
p:
p:
sealed class
sealed class
TênL
TênL
ớ
ớ
p
p
{
{
// Class members here.
// Class members here.
}
}
¾
¾
Vi
Vi
ệ
ệ
c s
c s
ử
ử
d
d
ụ
ụ
ng v
ng v
à
à
t
t
ạ
ạ
o c
o c
á
á
c đ
c đ
ố
ố
i tư
i tư
ợ
ợ
ng theo t
ng theo t
ừ
ừ
kh
kh
ó
ó
a new b
a new b
ì
ì
nh thư
nh thư
ờ
ờ
ng như c
ng như c
á
á
c l
c l
ớ
ớ
p kh
p kh
á
á
c.
c.
OOP in C# - GV: Phạm Đình Sắc –
VD 1:
VD 1:
20
Sealed
Sealed
class
class
Tau
Tau
{
{
public void
public void
LayThongTin()
LayThongTin()
{
{
Console.WriteLine(
Console.WriteLine(
“
“
Day la tau chiec tau
Day la tau chiec tau
”
”
);
);
}
}
}
}
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
”
”
);
);
}
}
}
} // Error ?
OOP in C# - GV: Phạm Đình Sắc –
VD 2 : s
VD 2 : s
ử
ử
d
d
ụ
ụ
ng l
ng l
ớ
ớ
p cô l
p cô l
ậ
ậ
p
p
21
class Program {
static void Main(string[ ] args)
{
SinhVien
SinhVien sv = new
SinhVien
SinhVien();
sv.XemThongTin();
}
}
}
} // Error ?
sealed
sealed
class
class
SinhVien
SinhVien
{
{
public void
public void
XemThongTin()
XemThongTin()
{
{
Console.WriteLine(
Console.WriteLine(
“
“
Day la sinh vien
Day la sinh vien
”
”
);
);
}
}
}
}
OOP in C# - GV: Phạm Đình Sắc –
22
L
L
ớ
ớ
p g
p g
ố
ố
c: (Object class)
c: (Object class)
¾
¾
T
T
ấ
ấ
t c
t c
ả
ả
c
c
á
á
c l
c l
ớ
ớ
p c
p c
ủ
ủ
a ngôn ng
a ngôn ng
ữ
ữ
C# v
C# v
à
à
t
t
ấ
ấ
t
t
c
c
ả
ả
c
c
á
á
c ki
c ki
ể
ể
u d
u d
ữ
ữ
li
li
ệ
ệ
u đ
u đ
ề
ề
u đư
u đư
ợ
ợ
c d
c d
ẫ
ẫ
n xu
n xu
ấ
ấ
t
t
ng
ng
ầ
ầ
m đ
m đ
ị
ị
nh t
nh t
ừ
ừ
l
l
ớ
ớ
p
p
System.Object
System.Object
(Không c
(Không c
ầ
ầ
n ph
n ph
ả
ả
i khai b
i khai b
á
á
o k
o k
ế
ế
th
th
ừ
ừ
a)
a)
¾
¾
L
L
ớ
ớ
p
p
Object
Object
l
l
à
à
l
l
ớ
ớ
p g
p g
ố
ố
c
c
trên cây phân
trên cây phân
c
c
ấ
ấ
p k
p k
ế
ế
th
th
ừ
ừ
a, n
a, n
ó
ó
cung c
cung c
ấ
ấ
p m
p m
ộ
ộ
t s
t s
ố
ố
phương th
phương th
ứ
ứ
c m
c m
à
à
c
c
á
á
c l
c l
ớ
ớ
p con c
p con c
ó
ó
th
th
ể
ể
ghi đ
ghi đ
è
è
(
(
override)
override)
như
như
b
b
ả
ả
ng sau:
ng sau:
OOP in C# - GV: Phạm Đình Sắc –
B
B
ả
ả
ng t
ng t
ó
ó
m t
m t
ắ
ắ
t phương th
t phương th
ứ
ứ
c c
c c
ủ
ủ
a l
a l
ớ
ớ
p Object
p Object
23
Phương thức Bổ từ truy cập Chức năng
string ToString() public virtual
Trả về một chuỗi mô tả của
đối tượng
int GetHashTable() public virtual
Được sử dụng nếu thi hành
từ điển
bool Equals(object obj) public virtual
So sánh các thực thể của
đối tượng
bool Equals(object objA,
object objB)
public static
So sánh các thực thể của
đối tượng
bool ReferenceEquals(object
objA, object objB)
public static
So sánh hai sự tham khảo
đến một đối tượng
Type GetType()
public
Tr
ả về chi tiết kiểu của một
đối tượng.
object MemberwiseClone() protected
tạo ra một bản copy của
đối tượng
void Finalize() protected virtual
Đây là một dạng
Destructor của .Net
OOP in C# - GV: Phạm Đình Sắc –
VD: minh h
VD: minh h
ọ
ọ
a l
a l
ớ
ớ
p Object
p Object
public class
public class
Xe
Xe
{
{
// bi
// bi
ế
ế
n th
n th
à
à
nh viên private lưu gi
nh viên private lưu gi
á
á
tr
tr
ị
ị
private int
private int
_
_
NhienLieu;
NhienLieu;
public
public
Xe(
Xe(
int
int
nhienlieu
nhienlieu
)
)
{
{
_
_
NhienLieu
NhienLieu
=
=
nhienlieu
nhienlieu
;
;
}
}
// gh
// gh
i đ
i đ
è
è
phương th
phương th
ứ
ứ
c ToString c
c ToString c
ủ
ủ
a l
a l
ớ
ớ
p Object
p Object
public
public
override
override
string
string
ToString()
ToString()
{
{
return
return
_
_
NhienLieu.ToString();
NhienLieu.ToString();
}
}
}
}
24
OOP in C# - GV: Phạm Đình Sắc –
VD: minh h
VD: minh h
ọ
ọ
a l
a l
ớ
ớ
p Object
p Object
public class
public class
Tester
Tester
{
{
static void
static void
Main(
Main(
string
string
[ ] args)
[ ] args)
{
{
int
int
i = 5;
i = 5;
Console.WriteLine(
Console.WriteLine(
“
“
Gia tri cua i la:
Gia tri cua i la:
: {0}
: {0}
”
”
, i.ToString() );
, i.ToString() );
Xe
Xe
x =
x =
new
new
Xe
Xe
(7);
(7);
Console
Console
.WriteLine(
.WriteLine(
“
“
Nhien lieu cua Xe la:
Nhien lieu cua Xe la:
{0}
{0}
”
”
, x.ToString() );
, x.ToString() );
Console
Console
.WriteLine(
.WriteLine(
“
“
Gia tri cua 5 la:
Gia tri cua 5 la:
{0}
{0}
”
”
, 5.ToString() );
, 5.ToString() );
Console
Console
.ReadLine();
.ReadLine();
}
}
}
}
// Display?
// Display?
Trong l
Trong l
ớ
ớ
p
p
Object
Object
phương th
phương th
ứ
ứ
c
c
ToString()
ToString()
đư
đư
ợ
ợ
c khai b
c khai b
á
á
o?
o?
public virtual string
public virtual string
ToString();
ToString();
25
OOP in C# - GV: Phạm Đình Sắc –
Q&A
Q&A