CU TRÚC
· Định nghĩa mt cu trúc
· To cu trúc
· Cu trúc là mt kiu giá tr
· Gi b khi dng mc định
· To cu trúc không gi new
· Câu hi & bài tp
Cu trúc là kiu d liu đơn gin do người dùng định nghĩa, kích thước nh dùng để
thay thế cho lp. Nhng cu trúc thì tương t như lp cũng cha các phương thc,
nhng thuc tính, các trường, các toán t, các kiu d liu lng bên trong và b ch mc
(indexer).
Có mt s s khác nhau quan trng gia nhng lp và cu trúc. Ví d, cu trúc thì
không h
tr kế tha và b hy ging như kiu lp. Mt điu quan trng nht là trong khi lp là
kiu
d liu tham chiếu, thì cu trúc là kiu d lêu giá tr (Chương 3 đã tho lun v kiu
d liu tham chiếu và kiu d liu giá tr). Do đó cu trúc thường dùng để th hin
các đối tượng không đòi hi mt ng nghĩa tham chiếu, hay mt lp nh mà khi đặt
vào trong stack thì có li hơn là đặt trong b nh heap.
Mt s nhn xét được rút ra là chúng ta ch nên s dng nhng cu trúc ch vi nhng
kiu
d liu nh, và nhng hành vi hay thuc tính ca nó ging như các kiu d liu đưc
xây dng sn.
Cu trúc có hiu qu khi chúng ta s dng chúng trong mng b nh (Chương 9).
Tuy nhiên, cu trúc s kém hiu qu khi chúng ta s dng dng tp hp (collections).
Tp hp được xây dng hướng ti các kiu d liu tham chiếu.
Trong chương này chúng ta s tìm hiu các định nghĩa và làm vic vi kiu cu trúc
cách
s dng b khi dng để khi to nhng giá tr ca cu trúc.
Định nghĩa mt cu trúc
Cú pp để khai báo mt cu trúc cũng tương t như cách khai báo mt lp:
[thuc tính] [b sung truy cp] struct <tên cu trúc> [: danh sách giao din]
{
[thành viên ca cu trúc]
}
d 7.1 sau minh ha cách to mt cu trúc. Kiu Location th hin mt
đim trong không gian hai chiu. Lưu ý rng cu trúc Location này được khai báo
chính xác như khi thc hin khai báo vi mt lp, ngoi tr vic s dng t khóa
struct. Ngoài ra cũng lưu ý rng hàm khi dng ca Location ly hai s nguyên và
gán nhng giá tr ca chúng cho các biến thành viên, x và y. Ta độ x và y ca
Location đưc khai báo như là thuc tính.
Ví d 7.1 To mt cu trúc.
-----------------------------------------------------------------------------
using System;
public struct Location
{
public Location( int xCoordinate, int yCoordinate)
{
xVal = xCoordinate;
yVal = yCoordinate;
}
public int x
{
get
{
}
set
{
}
}
return xVal;
xVal = value;
public int y
{
get
{
}
set
{
}
}
return yVal;
yVal = value;
public override string ToString()
{
return (String.Format(“{0}, {1}”, xVal, yVal));
}
// thuc tính private lưu to độ x, y
private int xVal;
private int yVal;
}
public class Tester
{
public void myFunc( Location loc)
{
loc.x = 50;
loc.y = 100;
Console.WriteLine(“Loc1 location: {0}”, loc);
}
static void Main()
{
Location loc1 = new Location( 200, 300);
Console.WriteLine(“Loc1 location: {0}”,
loc1); Tester t = new Tester();
t.myFunc( loc1 );
Console.WriteLine(“Loc1 location: {0}”, loc1);
}
}
-----------------------------------------------------------------------------
Không ging như nhng lp, cu trúc không h tr vic tha kế. Chúng được tha
kế ngm định t lp object (tương t như tt c các kiu d liu trong C#, bao gm
các kiu d liu xây dng sn) nhưng không th kế tha t các lp khác hay cu
trúc khác. Cu trúc cũng được ngm định là sealed, điu này có ý nghĩa là không có
lp nào hay bt c cu trúc nào có th dn xut t nó. Tuy nhiên, cũng ging như các
lp, cu trúc có th thc thi nhiu giao din. Sau đây là mt s s khác nhau na là:
Không có b hy và b khi to mc định tùy chn: Nhng cu trúc không có b
hy và cũng không có b khi to mc định không tham s tùy chn. Nếu chúng
ta không cung cp bt c b khi to nào thì cu trúc s được cung cp mt b
khi to mc định, khi đó giá tr 0 s được thiết lp cho tt c các d liu thành
viên hay nhng g tr mc định tương ng cho tng kiu d liu (bng 4.2). Nếu
chúng ta cung cp bt c b khi dng nào thì chúng ta phi khi to tt c các
trường trong cu trúc.
Không
cho
phép
khi
to:
chúng
ta
không
th
khi
to
các
trường
th
hin
(instan
ce
fields)
trong
cu
trúc,
do đó
đon
ngun
sau s
không
hp
l:
p
r
i
v
a
t
e
i
n
t
x
V
a
l
=
2
0
;
p
r
i
v
a
t
e
i
n
t
y
V
a
l
=
5
0
;
mc
điu
này
thc
hin
tt
đối
vi
lp.
C
u trúc
được
thiết kế
hướng
ti đơn
gin
gn
nh.
Trong
khi các
d liu
thành
viên
private
h tr
vic
che du
d liu
và s
đóng
gói.
Mt vài
người
lp
trình có
cm
giác
rng
điu
này phá
hng
cu
trúc.
H to
mt d
liu
thành
viê
n
pub
lic,
do
vy
đơ
n
gi
n
th
c
thi
m
t
cu
trú
c.
Nh
n
g
ng
ười
lp
trìn
h
khá
c
c
m
giá
c
rn
g
nh
n