Chương 3 NN TNG NGÔN NG C#
Copyright By Vinhuni45kkl
· Kiu d liu
· Kiu d liu xây dng sn
· Chn kiu d liu
· Chuyn đổi các kiu d liu
· Biến và hng
· Gán giá tr xác định cho biến
· Hng
· Kiu lit kê
· Kiu chui ký t
· Định danh
· Biu thc
· Khong trng
· u lnh
· Phân nhánh không điu kin
· Phân nhánh điu kin
· Câu lnh lp
· Toán t
· Namespace
· c ch dn biên dch
· Câu hi & bài tp
Trong chương trước chúng ta đã tìm hiu mt chương trình C# đơn gin nht.
Chương trình đó chưa đủ để din t mt chương trình viết bng ngôn ng C#, có q
nhiu phn và chi tiết đã b qua. Do vy trong chương này chúng ta s đi sâu vào tìm
hiu cu trúc và cú pháp ca ngôn ng C#.
Chương này s tho lun v h thng kiu d liu, phân bit gia kiu d liu xây
dng sn (như int, bool, string…) vi kiu d liu do người dùng định nghĩa (lp hay
cu trúc do người lp trình to ra...). Mt s cơ bn khác v lp trình như to và s
dng biến d liu hay hng cũng được đề cp cùng vi cu trúc lit kê, chui, định
danh, biu thc và cu lnh.
Trong phn hai ca chương hướng dn minh ha vic s dng lnh phân
nhánh if, switch, while, do...while, for, và foreach. Và các toán t như phép gán,
phép toán logic, phép toán quan h, và toán hc...
Như chúng ta đã biết C# là mt ngôn ng hướng đối tượng rt mnh, và công vic
ca người lp trình là kế tha để to và khai thác các đối tượng. Do vy để nm vng và
phát trin tt người lp trình cn phi đi t nhng bước đi du tiên tc là đi vào tìm hiu
nhng phn cơ bn và ct lõi nht ca ngôn ng.
Kiu d liu
C# là ngôn ng lp trình mnh v kiu d liu, mt ngôn ng mnh v kiu d liu
là phi khai báo kiu ca mi đối tượng khi to (kiu s nguyên, s thc, kiu
chui, kiu điu khin...) và trình biên dch s giúp cho người lp trình không b li
khi ch cho phép mt loi kiu d liu có th được gán cho các kiu d liu khác.
Kiu d liu ca mt đối tượng là mt tín hiu để trình biên dch nhn biết kích thước
ca mt đối tượng (kiu int có kích thước là 4 byte) và kh năng ca nó (như mt đối
tượng buttonth v, phn ng khi nhn,...).
Tương t như C++ hay Java, C# chia thành hai tp hp kiu d liu chính: Kiu
xây dng sn (built- in) mà ngôn ng cung cp cho người lp trình và kiu được người
dùng định nghĩa (user-defined) do người lp trình to ra.
C# phân tp hp kiu d liu này thành hai loi: Kiu d liu giá tr (value) và
kiu d liu tham chiếu (reference). Vic phân chi này do s khác nhau khi lưu kiu
d liu giá tr và kiu d liu tham chiếu trong b nh. Đối vi mt kiu d liu giá tr
thì s được lưu gi kích thước tht trong b nh đã cp phát là stack. Trong khi đó
thì địa ch ca kiu d liu tham chiếu thì được lưu trong stack nhưng đối tượng tht
s thì lưu trong b nh heap.
Nếu chúng ta có mt đối tượng có kích thước rt ln thì vic lưu gi chúng trên
b nh heap rt có ích, trong chương 4 s trình bày nhng li ích và bt li khi làm
vic vi kiu d liu tham chiếu, còn trong chương này ch tp trung kiu d kiu
cơ bn hay kiu xây dng sn.
Ghi chú: Tt c các kiu d liu xây dng sn là kiu d liu giá tr ngoi tr các
đối tượng và chui. Và tt c các kiu do người dùng định nghĩa ngoi tr kiu cu
trúc đều là kiu d liu tham chiếu.
Ngoài ra C# cũng h tr mt kiu con tr C++, nhưng hiếm khi được s dng, và ch
khi nào làm vic vi nhng đon lnh không được qun lý (unmanaged code).
Mã lnh không được qun lý là các lnh được viết bên ngoài nn .MS.NET, như
các đối tượng COM.
Kiu d liu xây dng sn
Ngôn ng C# đưa ra các kiu d liu xây dng sn rt hu dng, phù hp vi mt
ngôn ng lp trình hin đại, mi kiu d liu được ánh x đến mt kiu d liu được
h tr bi h thng xác nhn ngôn ng chung (Common Language Specification:
CLS) trong MS.NET. Vic ánh x các kiu d liu nguyên thu ca C# đến các kiu
d liu ca .NET s đảm bo các đối tượng đưc to ra trong C# có th được s dng
đồng thi vi các đối tượng được to bi bt c ngôn ng khác được biên dch bi
.NET, như VB.NET.
Mi kiu d liu mt s xác nhn kích thước không thay đổi, không
ging như C++, int trong C# luôn có kích thước là 4 byte bi vì nó được ánh x t
kiu Int32 trong . NET.
Bng 3.1 sau s mô t mt s các kiu d liu được xây dng sn
Kiu C# S byte Kiu .NET
t
byte 1 Byte S nguyên dương không du t 0-255
char 2 Char Ký t Unicode
bool 1 Boolean Giá tr logic true/ false
sbyte 1 Sbyte S nguyên có du ( t -128 đến 127)
short 2 Int16 S nguyên du giá tr t -32768
đến
32767.
ushort 2 Unt16 S nguyên không du 0 – 65.535
int 4 Int32 S nguyên du –2.147.483.647
2.147.483.647
uint 4 Uint32 S nguyên không du 0 – 4.294.967.295
float 4 Single Kiu du chm động, giá tr xp x t
3,4E-
38 đến 3,4E+38, vi 7 ch s có ngh
ĩ
a..
double 8 Double Kiu du chm động độ chính xác
gp đôi, giá tr xp x t 1,7E-308 đến
1,7E+308,
vi 15,16 chs có ngh
ĩ
a.
decimal 8 Decimal độ chính xác đến 28 con s và giá tr
thp phân, đưc dùng trong tính toán
tài chính, kiu này đòi hi phi có hu t
“m” hay “M”
theo sau giá t
r
.
long 8 Int64 Kiu s nguyên du giá tr
trong khong :
-9.223.370.036.854.775.808 đến
9.223.372.036.854.775.807
ulong 8 Uint64 S nguyên không du t 0 đến
0xffffffffffffffff
Bng 3.1 : Mô t các kiu d liu xây dng sn.
Ghi chú: Kiu giá tr logic ch có th nhn được giá trtrue hay false mà thôi. Mt
giá tr nguyên không th gán vào mt biến kiu logic trong C# và không có bt c
chuyn đổi ngm định nào. Điu này khác vi C/C++, cho phép biến logic được gán
giá tr nguyên, khi đó giá tr nguyên 0 là false và các giá trn li là true.
Chn kiu d liu
Thông thường để chn mt kiu d liu nguyên để s dng như short, int hay
long thường da vào độ ln ca giá tr mun s dng. Ví d, mt biến ushort th lưu
gi giá trt 0 đến 65.535, trong khi biến ulong có th lưu gi giá tr t 0 đến
4.294.967.295, do đó tùy vào min giá tr ca phm vi s dng biến mà chn các kiu
d liu thích hp nht. Kiu d liu int thường được s dng nhiu nht trong lp trình
vì vi kích thước 4 byte ca nó cũng đủ để lưu các giá tr nguyên cn thiết.Kiu s
nguyên có du thường được la chn s dng nhiu nht trong kiu s tr khi có lý do
chính đáng để s dng kiu d liu không du.
Stack và Heap
Stack là mt cu trúc d liu lưu tr thông tin dng xếp chng tc là
vào sau ra trước (Last In First Out : LIFO), điu này ging như chúng
ta có mt chng các đĩa, ta c xếp các đĩa vào chng và khi ly ra
thì đĩa nào nm trên cùng s được lp ra trước, tc là đĩa vào sau s
được ly ra trước.
Trong C#, kiu giá tr như kiu s nguyên được cp phát trên stack,
đây là vùng nh được thiết lp để lưu các giá tr, vùng nh y
được tham chiếu bi tên ca biến.
Kiu tham chiếu như các đối tượng thì được cp phát trên heap. Khi
mt đối tượng được cp phát trên heap thì địa ch ca nó được tr v,
địa ch này được gán đến mt tham chiếu.
Thnh thong cơ chế thu gom s hũy đối tượng trong stack sau khi
mt vùng trong stack được đánh du là kết thúc. Thông thường mt
vùng trong stack được định nghĩa bi mt hàm. Do đó, nếu chúng
ta khai báo mt biến cc b trong mt hàm là mt đối tưng thì đối
tượng này s đánh du để hũy khi kết thúc hàm. Nhng đối tượng trên
heap s được thu gom sau khi mt tham chiếu cui cùng đến đối
tượng đó đưc gi.
ch tt nht khi s dng biến không du giá tr ca biến luôn luôn dương, biến
này thường th hin mt thuc tính nào đó có min giá tr dương. Ví d khi cn khai báo
mt biến lưu gi tui ca mt người thì ta dùng kiu byte (s nguyên t 0-255)
tui ca người không tho âm được.
Kiu float, double, và decimal đưa ra nhiu mc độ khác nhau v kích thước cũng
như độ chính xác.Vi thao tác trên các phân s nh thì kiu float là thích hp nht.
Tuy nhiên lưu ý rng trình biên dch luôn luôn hiu bt c mt s thc nào cũng là
mt s kiu double tr khi chúng ta khai báo rõ ràng. Đển mt s kiu float thì s
phi có ký t f theo sau.
float soFloat = 24f;
Kiu d liu ký t th hin các ký t Unicode, bao gm các ký t đơn gin, ký t
theo Unicode và các ký t thoát khác được bao trong nhng du nháy đơn. Ví d,
A là mt ký t đơn gin trong khi \u0041 là mt ký t Unicode. Ký t thoát là nhng