TRNG I HC KHOA HC T NHIÊN
KHOA CÔNG NGH THÔNG TIN
B MÔN CÔNG NGH PHN MM
PHM VN VIT - TRNG LP V
TÌM HIU NGÔN NG C# VÀ
VIT MT NG DNG MINH HA
ÁN TT NGIP
GIÁO VIÊN HNG DN
NGUYN TN TRN MINH KHANG
TP. HCM 2002
TRNG I HC KHOA HC T NHIÊN
KHOA CÔNG NGH THÔNG TIN
B MÔN CÔNG NGH PHN MM
PHM VN VIT - TRNG LP V
TÌM HIU NGÔN NG C# VÀ VIT MT NG DNG MINH HA
GIÁO VIÊN HNG DN
NGUYN TN TRN MINH KHANG
TP. HCM 2002
Li cám n
có th hoàn tt đc bài đ án này, trc tiên phi k đn công sc ca thy
Nguyn Tn Trn Minh Khang. Chúng em kính li cm n đn thy đã tn tình hng
dn và giúp đ trong thi gian thc hin đ án này.
Chúng em xin t lòng bit n sâu sc đi vi gia đình đã đng viên, to điu kin đ
thc hin tt bài đ án. Xin cám n cha, m, anh, ch, em!
Chúng em cng xin chân thành cm n đn các thy cô khoa Công ngh thông tin
trng i hc Khoa hc T nhiên Thành ph H Chí Minh đã truyn đt nhng kin
thc, kinh nghim quí báu cho chúng em trong quá trình hc tp ti trng.
Chúng em cng xin chân thành cm n đn các bn bè đã giúp đ tài liu, trao đi hc
thut mi có th thc hin đ án này. Xin gi li cm n đn các bn H Ngc Huy,
Trn Th Anh, Bùi Thanh Tun
Thành ph H Chí Minh, ngày 03 tháng 8 nm 2002
Sinh viên
Phm Vn Vit
Trng Lp V
Mc lc
Li cám n 3
Mc lc 4
Tóm tt 1
Phn 1 Tìm hiu ngôn ng C# 1
Chng 1 C# và .Net Framework 2
1.1 Nn tng ca .NET 2
1.2 .NET Framework 3
1.3 Biên dch và ngôn ng trung gian (MSIL) 4
1.4 Ngôn ng C# 5
Chng 2 Khi đu 6
2.1 Lp, đi tng và kiu 6
2.2 Phát trin “Hello World” 8
Chng 3 Nhng c s ca ngôn ng C# 12
3.1 Các kiu 12
3.2 Bin và hng 14
3.3 Biu thc 16
3.4 Khong trng 16
3.5 Câu lnh 16
3.6 Toán t 19
3.7 To vùng tên 21
3.8 Ch th tin x lý 22
Chng 4 Lp và đi tng 24
4.1 nh ngha lp 24
4.2 To đi tng 25
4.3 S dng các thành viên tnh 27
4.4 Hy đi tng 29
4.5 Truyn tham s 30
4.6 Np chng phng thc và hàm dng 32
4.7 óng gói d liu vi property 33
Chng 5 Tha k và a hình 35
5.1 c bit hoá và tng quát hoá 35
5.2 S k tha 35
5.3 a hình 37
5.4 Lp tru tng 38
5.5 Lp gc ca tt c các lp: Object 39
5.6 Kiu Boxing và Unboxing 40
5.7 Lp lng 42
Chng 6 Np chng toán t 44
6.1 Cách dùng t khoá operator 44
6.2 Cách h tr các ngôn ng .Net khác 44
6.3 S hu ích ca các toán t 44
6.4 Các toán t logic hai ngôi 45
6.5 Toán t so sánh bng 45
6.6 Toán t chuyn đi kiu (ép kiu) 45
Chng 7 Cu trúc 48
7.1 nh ngha cu trúc 48
7.2 Cách to cu trúc 49
Chng 8 Giao din 50
8.1 Cài đt mt giao din 50
8.2 Truy xut phng thc ca giao din 52
8.3 Np chng phn cài đt giao din 54
8.4 Thc hin giao din mt cách tng minh 55
Chng 9 Array, Indexer, and Collection 58
9.1 Mng (Array) 58
9.2 Câu lnh foreach 59
9.3 Indexers 62
9.4 Các giao din túi cha 65
9.5 Array Lists 65
9.6 Hàng đi 65
9.7 Stacks 66
9.8 Dictionary 66
Chng 10 Chui 67
10.1 To chui mi 67
10.2 Phng thc ToString() 67
10.3 Thao tác chui 68
10.4 Thao tác chui đng 70
Chng 11 Qun lý li 72
11.1 Ném và bt bit l 73
11.2 i tng Exception 80
11.3 Các bit l t to 82
11.4 Ném bit l ln na. 83
Chng 12 Delegate và Event 87
12.1 Delegate (y thác, y quyn) 87
12.2 Event (S kin) 101
Chng 13 Lp trình vi C# 109
13.1 ng dng Windows vi Windows Form 109
Chng 14 Truy cp d liu vi ADO.NET 144
14.1 C s d liu và ngôn ng truy vn SQL 144
14.2 Mt s loi kt ni hin đang s dng 144
14.3 Kin trúc ADO.NET 145
14.4 Mô hình đi tng ADO.NET 146
14.5 Trình cung cp d liu (.NET Data Providers) 148
14.6 Khi s vi ADO.NET 148
14.7 S dng trình cung cp d liu đc qun lý 151
14.8 Làm vic vi các điu khin kt buc d liu 152
14.9 Thay đi các bn ghi ca c s d liu 161
Chng 15 ng dng Web vi Web Forms 173
1.1 Tìm hiu v Web Forms 173
15.1 Các s kin ca Web Forms 174
15.2 Hin th chui lên trang 175
15.3 iu khin xác nhn hp 178
15.4 Mt s ví d mu minh ha 179
Chng 16 Các dch v Web 192
Chng 17 Assemblies và Versioning 196
17.1 Tp tin PE 196
17.2 Metadata 196
17.3 Ranh gii an ninh 196
17.4 S hiu phiên bn (Versioning) 196
17.5 Manifest 196
17.6 a Module Assembly 197
17.7 Assembly ni b (private assembly) 198
17.8 Assembly chia s (shared assembly) 198
Chng 18 Attributes và Reflection 200
18.1 Attributes 200
18.2 Attribute mc đnh (intrinsic attributes) 200
18.3 Attribute do lp trình viên to ra 201
18.4 Reflection 203
Chng 19 Marshaling và Remoting 204
19.1 Min ng Dng (Application Domains) 204
19.2 Context 206
19.3 Remoting 208
Chng 20 Thread và S ng B 215
20.1 Thread 215
20.2 ng b hóa (Synchronization) 216
20.3 Race condition và DeadLock 221
Chng 21 Lung d liu 223
21.1 Tp tin và th mc 223
21.2 c và ghi d liu 230
21.3 Bt đng b nhp xut 235
21.4 Serialization 238
21.5 Isolate Storage 244
Chng 22 Lp trình .NET và COM 246
22.1 P/Invoke 246
22.2 Con tr 248
Phn 2 Xây dng mt ng dng minh ha 250
Chng 23 Website dy hc ngôn ng C# 251
23.1 Hin trng và yêu cu 251
23.2 Phân tích hng đi tng 258
23.3 Thit k hng đi tng 262
Tóm tt
tài này tp trung tìm hiu toàn b các khái nim liên quan đn ngôn ng C#.
Bi vì C# đc Microsoft phát trin nh là mt thành phn ca khung ng dng
.NET Framework và hng Internet nên đ tài này bao gm hai phn sau:
Phn 1: Tìm hiu v ngôn ng C#
Vic tìm hiu bao gm c các kin thc nn tng v công ngh .NET Framework,
chun b cho các khái nim liên quan gia C# và .NET Framework. Sau đó tìm
hiu v b cú pháp ca ngôn ng này, bao gm toàn b tp lnh, t khóa, khái
nim v lp trình hng đi tng theo C#, các h tr lp trình hng
component Sau cùng là cách lp trình C# vi ng dng Window cho máy đ
bàn và C# vi các công ngh hin đi nh ASP.NET. ADO.NET, XML cho lp
trình Web.
Phn 2: Xây dng mt ng dng
Phn này là báo cáo v ng dng minh ha cho vic tìm hiu trên. Tên ng
dng là Xây dng mt Website dy hc C#. ây là ng dng Web cài đt bng
ngôn ng C# và ASP.NET. Trong đó ASP.NET đc dùng đ xây dng giao
din tng tác vi ngi dùng; còn C# là ngôn ng lp trình bên di. ng dng
có thao tác c s d liu (Microsoft SQL Server) thông quan mô hình
ADO.NET.
1
Phn 1
Tìm hiu ngôn ng C#
C# và .Net Framework Gvhd: Nguyn Tn Trn Minh Khang
2
Chng 1 C# và .Net Framework
Mc tiêu ca C# là cung cp mt ngôn ng lp trình đn gin, an toàn, hin đi,
hng đi tng, đt trng tâm vào Internet, có kh nng thc thi cao cho môi
trng .NET. C# là mt ngôn ng mi, nhng tích hp trong nó nhng tinh hoa ca
ba thp k phát trin ca ngôn ng lp trình. Ta có th d dàng thy trong C# có
nhng đc trng quen thuc ca Java, C++, Visual Basic, …
tài này đt trng tâm gii thiu ngôn ng C# và cách dùng nó nh là mt công
c lp trình trên nn tng .NET. Vi ngôn ng C++, khi hc nó ta không cn quan
tâm đn môi trng thc thi. Vi ngôn ng C#, ta hc đ to mt ng dng .NET,
nu l là ý này có th b l quan đim chính ca ngôn ng này. Do đó, trong đ tài
này xét C# tp trung trong ng cnh c th là nn tng .NET ca Microsoft và trong
các ng dng máy tính đ bàn và ng dng Internet.
Chng này trình bày chung v hai phn là ngôn ng C# và nn tng .NET, bao
gm c khung ng dng .NET (.NET Framework)
1.1 Nn tng ca .NET
Khi Microsoft công b C# vào tháng 7 nm 2000, vic khánh thành nó ch là mt
phn trong s rt nhiu s kin mà nn tng .Net đc công công b. Nn tng .Net
là bô khung phát trin ng dng mi, nó cung cp mt giao din lp trình ng dng
(Application Programming Interface - API) mi m cho các dch v và h điu hành
Windows, c th là Windows 2000, nó cng mang li nhiu k thut khác ni bt
ca Microsoft sut t nhng nm 90. Trong s đó có các dch v COM+, công ngh
ASP, XML và thit k hng đi tng, h tr các giao thc dch v web mi nh
SOAP, WSDL và UDDL vi trng tâm là Internet, tt c đc tích hp trong kin
trúc DNA.
Nn tng .NET bao gm bn nhóm sau:
1. Mt tp các ngôn ng, bao gm C# và Visual Basic .Net; mt tp các công c
phát trin bao gm Visual Studio .Net; mt tp đy đ các th vin phc v
cho vic xây dng các ng dng web, các dch v web và các ng dng
Windows; còn có CLR - Common Language Runtime: (ngôn ng thc thi
dùng chung) đ thc thi các đi tng đc xây dng trên bô khung này.
2. Mt tp các Server Xí nghip .Net nh SQL Server 2000. Exchange 2000,
BizTalk 2000, … chúng cung cp các chc nng cho vic lu tr d liu quan
h, th đin t, thng mi đin t B2B, …
C# và .Net Framework Gvhd: Nguyn Tn Trn Minh Khang
3
3. Các dch v web thng mi min phí, va đc công b gn đy nh là d
án Hailstorm; nhà phát trin có th dùng các dch v này đ xây dng các ng
dng đòi hi tri thc v đnh danh ngi dùng…
4. .NET cho các thit b không phi PC nh đin thoi (cell phone), thit b game
1.2 .NET Framework
.Net h tr tích hp ngôn ng, tc là ta có th k tha các lp, bt các bit l, đa
hình thông qua nhiu ngôn ng. .NET Framework thc hin đc vic này nh vào
đc t Common Type System - CTS (h thng kiu chung) mà tt c các thành phn
.Net đu tuân theo. Ví d, mi th trong .Net đu là đi tng, tha k t lp gc
System.Object.
Ngoài ra .Net còn bao gm Common Language Specification - CLS (đc t ngôn
ng chung). Nó cung cp các qui tc c bn mà ngôn ng mun tích hp phi tha
mãn. CLS ch ra các yêu cu ti thiu ca ngôn ng h tr .Net. Trình biên dch
tuân theo CLS s to các đi tng có th tng hp vi các đi tng khác. B th
vin lp ca khung ng dng (Framework Class Library - FCL) có th đc dùng
bi bt k ngôn ng nào tuân theo CLS.
.NET Framework nm tng trên ca h điu hành (bt k h điu hành nào không
ch là Windows). .NET Framework bao bao gm:
•
Bn ngôn ng chính thc: C#, VB.Net, C++, và Jscript.NET
• Common Language Runtime - CLR, nn tng hng đi tng cho phát trin
ng dng Windows và web mà các ngôn ng có th chia s s dng.
•
B th vin Framework Class Library - FCL.
Hình 1-1 Kin trúc khung ng dng .Net
C# và .Net Framework Gvhd: Nguyn Tn Trn Minh Khang
4
Thành phn quan trng nht ca .NET Framework là CLR, nó cung cp môi trng
cho ng dng thc thi, CLR là mt máy o, tng t máy o Java. CLR kích hot
đi tng, thc hin kim tra bo mt, cp phát b nh, thc thi và thu dn chúng.
Trong Hình 1-1 tng trên ca CLR bao gm:
• Các lp c s
•
Các lp d liu và XML
• Các lp cho dch v web, web form, và Windows form.
Các lp này đc gi chung là FCL, Framework Class Library, cung cp API
hng đi tng cho tt c các chc nng ca .NET Framework (hn 5000 lp).
Các lp c s tng t vi các lp trong Java. Các lp này h tr các thao tác nhp
xut, thao tác chui, vn bn, qun lý bo mt, truyn thông mng, qun lý tiu trình
và các chc nng tng hp khác …
Trên mc này là lp d liu và XML. Lp d liu h tr vic thao tác các d liu
trên c s d liu. Các lp này bao gm các lp SQL (Structure Query Language:
ngôn ng truy vn có cu trúc) cho phép ta thao tác d liu thông qua mt giao tip
SQL chun. Ngoài ra còn mt tp các lp gi là ADO.Net cng cho phép thao tác
d liu. Lp XML h tr thao tác d liu XML, tìm kim và din dch XML.
Trên lp d liu và XML là lp h tr xây dng các ng dng Windows (Windows
forms), ng dng Web (Web forms) và dch v Web (Web services).
1.3 Biên dch và ngôn ng trung gian (MSIL)
Vi .NET chng trình không biên dch thành tp tin thc thi, mà biên dch thành
ngôn ng trung gian (MSIL - Microsoft Intermediate Language, vit tt là IL), sau
đó chúng đc CLR thc thi. Các tp tin IL biên dch t C# đng nht vi các tp
tin IL biên dch t ngôn ng .Net khác.
Khi biên dch d án, mã ngun C# đc chuyn thành tp tin IL lu trên đa. Khi
chy chng trình thì IL đc biên dch (hay thông dch) mt ln na bng trình
Just In Time - JIT, khi này kt qu là mã máy và b x lý s thc thi.
Trình biên dch JIT ch chy khi có yêu cu. Khi mt phng thc đc gi, JIT
phân tích IL và sinh ra mã máy ti u cho tng loi máy. JIT có th nhn bit mã
ngun đã đc biên dch cha, đ có th chy ngay ng dng hay phi biên dch li.
CLS có ngha là các ngôn ng .Net cùng sinh ra mã IL. Các đi tng đc to theo
mt ngôn ng nào đó s đc truy cp và tha k bi các đi tng ca ngôn ng
khác. Vì vy ta có th to đc mt lp c s trong VB.Net và tha k nó t C#.
C# và .Net Framework Gvhd: Nguyn Tn Trn Minh Khang
5
1.4 Ngôn ng C#
C# là mt ngôn ng rt đn gin, vi khong 80 t khoá và hn mi kiu d liu
dng sn, nhng C# có tính din đt cao. C# h tr lp trình có cu trúc, hng đi
tng, hng thành phn (component oriented).
Trng tâm ca ngôn ng hng đi tng là lp. Lp đnh ngha kiu d liu mi,
cho phép m rng ngôn ng theo hng cn gii quyt. C# có nhng t khoá dành
cho vic khai báo lp, phng thc, thuc tính (property) mi. C# h tr đy đ
khái nim tr ct trong lp trình hng đi tng: đóng gói, tha k, đa hình.
nh ngha lp trong C# không đòi hi tách ri tp tin tiêu đ vi tp tin cài đt nh
C++. Hn th, C# h tr kiu su liu mi, cho phép su liu trc tip trong tp tin
mã ngun. n khi biên dch s to tp tin su liu theo đnh dng XML.
C# h tr khái nim giao din, interfaces (tng t Java). Mt lp ch có th k
tha duy nht mt lp cha nhng có th cài đt nhiu giao din.
C# có kiu cu trúc, struct (không ging C++). Cu trúc là kiu hng nh và b gii
hn.Cu trúc không th tha k lp hay đc k tha nhng có th cài đt giao din.
C# cung cp nhng đc trng lp trình hng thành phn nh property, s kin và
dn hng khai báo (đc gi là attribute). Lp trình hng component đc h tr
bi CLR thông qua siêu d liu (metadata). Siêu d liu mô t các lp bao gm các
phng thc và thuc tính, các thông tin bo mt ….
Assembly là mt tp hp các tp tin mà theo cách nhìn ca lp trình viên là các th
vin liên kt đng (DLL) hay tp tin thc thi (EXE). Trong .NET mt assembly là
mt đon v ca vic tái s dng, xác đnh phiên bn, bo mt, và phân phi. CLR
cung cp mt s các lp đ thao tác vi assembly.
C# cng cho truy cp trc tip b nh dùng con tr kiu C++, nhng vùng mã đó
đc xem nh không an toàn. CLR s không thc thi vic thu dn rác t đng các
đi tng đc tham chiu bi con tr cho đn khi lp trình viên t gii phóng.
Khi đu Gvhd: Nguyn Tn Trn Minh Khang
6
Chng 2 Khi đu
Chng này ta s to, biên dch và chy chng trình “Hello World” bng ngôn ng
C#. Phân tích ngn gn chng trình đ gii thiu các đc trng chính yu trong
ngôn ng C#.
Ví d 2-1 Chng trình Hello World
class HelloWorld
{
static void Main( )
{
// s dng đi tng console ca h thng
System.Console.WriteLine("Hello World");
}
}
Sau khi biên dch và chy HelloWorld, kt qu là dòng ch “Hello World” hin th
trên màn hình.
2.1 Lp, đi tng và kiu
Bn cht ca lp trình hng đi tng là to ra các kiu mi. Mt kiu biu din
mt vt gì đó. Ging vi các ngôn ng lp trình hng đi tng khác, mt kiu
trong C# cng đnh ngha bng t khoá class (và đc gi là lp) còn th hin ca
lp đc gi là đi tng.
Xem Ví d 2-1 ta thy cách khai báo mt lp
HelloWorld. Ta thy ngay là cách
khai báo và ni dung ca mt lp hoàn toàn ging vi ngôn ng Java và C++, ch
có khác là cui khai báo lp không cn du “;”
2.1.1 Phng thc
Các hành vi ca mt lp đc gi là các phng thc thành viên (gi tt là phng
thc) ca lp đó. Mt phng thc là mt hàm (phng thc thành viên còn gi là
hàm thành viên). Các phng thc đnh ngha nhng gì mà mt lp có th làm.
Cách khai báo, ni dung và cách s dng các phng thc ging hoàn toàn vi Java
và C++. Trong ví d trên có mt phng thc đc bit là phng thc Main() (nh
hàm
main() trong C++) là phng thc bt đu ca mt ng dng C#, có th tr v
kiu
void hay int. Mi mt chng trình (assembly) có th có nhiu phng thc
Main nhng khi đó phi ch đnh phng thc
Main() nào s bt đu chng trình.
Khi đu Gvhd: Nguyn Tn Trn Minh Khang
7
2.1.2 Các ghi chú
C# có ba kiu ghi chú trong đó có hai kiu rt quen thuc ca C++ là dùng:
"//" và
"
/* … */". Ngoài ra còn mt kiu ghi chú na s trình bày các chng k.
Ví d 2-2 Hai hình thc ghi chú trong C#
class HelloWorld
{
static void Main( ) // ây là ghi trên mt dòng
{
/* Bt đu ghi chú nhiu dòng
Vn còn trong ghi chú
Kt thúc ghi chú bng */
System.Console.WriteLine("Hello World");
}
}
2.1.3 ng dng dng console
“Hello World” là mt ng dng console. Các ng dng dng này thng không có
giao din ngi dùng đ ha Các nhp xut đu thông qua các console chun (dng
dòng lnh nh DOS).
Trong ví d trên, phng thc
Main() vit ra màn hình dòng “Hello World”. Do
màn hình qun lý mt đi tng
Console, đi tng này có phng thc
WriteLine() cho phép đt mt dòng ch lên màn hình. gi phng thc này ta
dùng toán t “.”, nh sau:
Console.WriteLine(…).
2.1.4 Namespaces - Vùng tên
Console là mt trong rt nhiu (c ngàn) lp trong b th vin .NET. Mi lp đu
có tên và nh vy có hàng ngàn tên mà lp trình viên phi nh hoc phi tra cu
mi khi s dng. Vn đ là phi làm sao gim bt lng tên phi nh.
Ngoài vn đ phi nh quá nhiu tên ra, còn mt nhn xét sau: mt s lp có mi
liên h nào đó v mt ng ngha, ví d nh lp Stack, Queue, Hashtable … là các
lp cài đt cu trúc d liu túi cha. Nh vy có th nhóm nhng lp này thành mt
nhóm và thay vì phi nh tên các lp thì lp trình viên ch cn nh tên nhóm, sau đó
có th thc hin vic tra cu tên lp trong nhóm nhanh chóng hn. Nhóm là mt
vùng tên trong C#.
Mt vùng tên có th có nhiu lp và vùng tên khác. Nu vùng tên A nm trong vùng
tên B, ta nói vùng tên A là vùng tên con ca vùng tên B. Khi đó các lp trong vùng
tên A đc ghi nh sau:
B.A.Tên_lp_trong_vùng_tên_A
System là vùng tên cha nhiu lp hu ích cho vic giao tip vi h thng hoc các
lp công dng chung nh lp Console, Math, Exception….Trong ví d HelloWorld
trên, đi tng
Console đc dùng nh sau:
System.Console.WriteLine("Hello World");
Khi đu Gvhd: Nguyn Tn Trn Minh Khang
8
2.1.5 Toán t chm “.”
Nh trong Ví d 2-1 toán t chm đc dùng đ truy sut d liu và phng thc
mt lp (nh Console.WriteLine()), đng thi cng dùng đ ch đnh tên lóp trong
mt vùng tên (nh System.Console).
Toán t du chm cng đc dùng đ truy xut các vùng tên con ca mt vùng tên
Vùng_tên.Vùng_tên_con.Vùng_tên_con_con
2.1.6 T khoá using
Nu chng trình s dng nhiu ln phng thc Console.WriteLine, t System s
phi vit nhiu ln. iu này có th khin lp trình viên nhàm chán. Ta s khai báo
rng chng trình có s dng vùng tên System, sau đó ta dùng các lp trong vùng
tên System mà không cn phi có t System đi trc.
Ví d 2-3 T khóa using
// Khai báo chng trình có s dng vùng tên System
using System;
class HelloWorld
{
static void Main( )
{
// Console thuc vùng tên System
Console.WriteLine("Hello World");
}
}
2.1.7 Phân bit hoa thng
Ngôn ng C# cng phân bit ch hoa thng ging nh Java hay C++ (không nh
VB). Ví d nh
WriteLine khác vi writeLine và c hai cùng khác vi
WRITELINE. Tên bin, hàm, hng … đu phân bit ch hoa ch thng.
2.1.8 T khoá static
Trong Ví d 2-1 phng thc
Main() đc khai báo kiu tr v là void và dùng t
khoá static. T khoá static cho bit là ta có th gi phng thc
Main() mà không
cn to mt đi tng kiu
HelloWorld.
2.2 Phát trin “Hello World”
Có hai cách đ vit, biên dch và chy chng trình HelloWorld là dùng môi trng
phát trin tích hp (IDE) Visual Studio .Net hay vit bng trình son tho vn bn
và biên dch bng dòng lnh. IDE Vs.Net d dùng hn. Do đó, trong đ tài này ch
trình bày theo hng làm vic trên IDE Visual Studio .Net.
Khi đu Gvhd: Nguyn Tn Trn Minh Khang
9
2.2.1 Son tho “Hello World”
to chng trình “Hello World” trong IDE, ta chn Visual Studio .Net t thanh
thc đn. Tip theo trên màn hình ca IDE chn File > New > Project t thanh
thc đn, theo đó xut hin mt ca s nh sau:
Hình 2-1 To mt ng dng console trong VS.Net
to chng trình “Hello World” ta chn Visual C# Project > Console
Application, đin HelloWorld trong ô Name, chn đng dn và nhn OK. Mt ca
s son tho xut hin.
Khi đu Gvhd: Nguyn Tn Trn Minh Khang
10
Hình 2-2 Ca s son tho ni dung mã ngun
Vs.Net t to mt s mã, ta cn chnh sa cho phù hp vi chng trình ca mình.
2.2.2 Biên dch và chy “Hello World”
Sau khi đã đy đ mã ngun ta tin hành biên dch chng trình: nhn “Ctrl–Shift–
B” hay chn Build > Build Solution. Kim tra xem chng trình có li không ca
s Output cui màn hình. Khi biên dch chng trình nó s lu li thành tp tin .cs.
Chy chng trình bng “Ctrl–F5” hay chn Debug > Start Without Debugging.
2.2.3 Trình g ri ca Visual Studio .Net
Trình g ri ca VS.Net rt mnh hu ích. Ba k nng chính yu đ s dng ca
trình g ri là:
•
Cách đt đim ngt (breakpoint) và làm sao chy cho đn đim ngt
• Làm th nào chy tng bc và chy vt qua mt phng thc.
• Làm sao đ quan sát và hiu chnh giá tr ca bin, d liu thành viên, …
Cách đn gin nht đ đt đim ngt là bm chut trái vào phía l trái, ti đó s hin
lên mt chm đ.
Khi đu Gvhd: Nguyn Tn Trn Minh Khang
11
Hình 2-3 Minh ha mt đim ngt
Cách dùng trình g ri hoàn toàn ging vi trình g ri trong VS 6.0. Nó cho phép
ta dng li mt v trí bt k, cho ta kim tra giá tr tc thi bng cách di chuyn
chut đn v tr bin. Ngoài ra, khi g ri ta cng có th xem giá tr các bin thông
qua ca s Watch và Local.
chy trong ch đ g ri ta chn Debug å Start hay nhn
F5
, mun chy tng
bc ta bm F11 và chy vt qua mt phng thc ta bm F10.
Nhng c s ca ngôn ng C# Gvhd: Nguyn Tn Trn Minh Khang
12
Chng 3 Nhng c s ca ngôn ng C#
Trong chng này s trình bày v h thng kiu trong C#; phân bit kiu dng sn
(int, long, bool, …) vi các kiu do ngi dùng đnh ngha. Ngoài ra, chng này
cng s trình bày cách to và dùng bin, hng; gii thiu kiu lit kê, chui, kiu
đnh danh, biu thc, và câu lnh. Phn hai ca chng trình bày v các cu trúc
điu kin và các toán t logic, quan h, toán hc, …
3.1 Các kiu
C# buc phi khai báo kiu ca đi tng đc to. Khi kiu đc khai báo rõ ràng,
trình biên dch s giúp ngn nga li bng cách kim tra d liu đc gán cho đi
tng có hp l không, đng thi cp phát đúng kích thc b nh cho đi tng.
C# phân thành hai loi: loai d liu dng sn và loi do ngi dùng đnh ngha.
C# cng chia tp d liu thành hai kiu: giá tr và tham chiu. Bin kiu giá tr đc
lu trong vùng nh stack, còn bin kiu tham chiu đc lu trong vùng nh heap.
C# cng h tr kiu con tr ca C++, nhng ít khi đc s dng. Thông thng con
tr ch đc s dng khi làm vic trc tip vi Win API hay các đi tng COM.
3.1.1 Loi d liu đnh sn
C# có nhiu kiu d liu đnh sn, mi kiu ánh x đn mt kiu đc h tr bi
CLS (Commom Language Specification), ánh x đ đm bo rng đi tng đc
to trong C# không khác gì đi tng đc to trong các ngôn ng .NET khác Mi
kiu có mt kích thc c đnh đc lit kê trong bng sau
Bng 3-1 Các kiu dng sn
Kiu
Kích thc
(byte)
Kiu .Net Mô t - giá tr
byte 1 Byte Không du (0 255)
char 1 Char Mã ký th Unicode
bool 1 Boolean true hay false
sbyte 1 Sbyte Có du (-128 127)
short 2 Int16 Có du (-32768 32767)
ushort 2 Uint16 Không du (0 65535)
int 4 Int32 Có du (-2147483647 2147483647)
Nhng c s ca ngôn ng C# Gvhd: Nguyn Tn Trn Minh Khang
13
uint 4 Uint32 Không du (0 4294967295)
float 4 Single S thc (ả ±1.5*10-45 ả ±3.4*1038)
double 8 Double S thc (ả ±5.0*10-324 ả ±1.7*10308)
decimal 8 Decimal s có du chm tnh vi 28 ký s và du chm
long
8
Int64 S nguyên có du (- 9223372036854775808
9223372036854775807)
ulong 8 Uint64 S nguyên không du (0 0xffffffffffffffff.)
3.1.1.1 Chn mt kiu đnh sn
Tu vào tng giá tr mun lu tr mà ta chn kiu cho phù hp. Nu chn kiu quá
ln so vi các giá tr cn lu s làm cho chng trình đòi hi nhiu b nh và chy
chm. Trong khi nu giá tr cn lu ln hn kiu thc lu s làm cho giá tr các bin
b sai và chng trình cho kt qu sai.
Kiu char biu din mt ký t Unicode. Ví d “\u0041” là ký t “A” trên bng
Unicode. Mt s ký t đc bit đc biu din bng du “\” trc mt ký t khác.
Bng 3-2 Các ký t đc bit thông dng
Ký t Ngha
\’ du nháy đn
\”
du nháy đôi
\\ du chéo ngc “\”
\0
Null
\a Alert
\b
lùi v sau
\f Form feed
\n
xung dòng
\r v đu dòng
\t
Tab ngang
\v Tab dc
3.1.1.2 Chuyn đi kiu đnh sn
Mt đi tng có th chuyn t kiu này sang kiu kia theo hai hình thc: ngm
hoc tng minh. Hình thc ngm đc chuyn t đng còn hình thc tng minh
cn s can thip trc tip ca ngi lp trình (ging vi C++ và Java).
short x = 5;
int y ;
y = x;
// chuyn kiu ngm đnh - t đng
x = y; // li, không biên dch đc
x = (short) y; // OK
Nhng c s ca ngôn ng C# Gvhd: Nguyn Tn Trn Minh Khang
14
3.2 Bin và hng
Bin dùng đ lu tr d liu. Mi bin thuc v mt kiu d liu nào đó.
3.2.1 Khi to trc khi dùng
Trong C#, trc khi dùng mt bin thì bin đó phi đc khi to nu không trình
biên dch s báo li khi biên dch. Ta có th khai báo bin trc, sau đó khi to và
s dng; hay khai báo bin và khi gán trong lúc khai báo.
int x; // khai báo bin trc
x = 5;
// sau đó khi gán giá tr và s dng
int y = x; // khai báo và khi gán cùng lúc
3.2.2 Hng
Hng là mt bin nhng giá tr không thay đi theo thi gian. Khi cn thao tác trên
mt giá tr xác đnh ta dùng hng. Khai báo hng tng t khai báo bin và có thêm
t khóa const trc. Hng mt khi khi đng xong không th thay đi đc na.
const int HANG_SO = 100;
3.2.3 Kiu lit kê
Enum là mt cách thc đ đt tên cho các tr nguyên (các tr kiu s nguyên, theo
ngha nào đó tng t nh tp các hng), làm cho chng trình rõ ràng, d hiu
hn. Enum không có hàm thành viên. Ví d to mt enum tên là Ngay nh sau:
enum Ngay {Hai, Ba, Tu, Nam, Sau, Bay, ChuNhat};
Theo cách khai báo này enum ngày có by giá tr nguyên đi t 0 = Hai, 1 = Ba, 2 =
T … 7 = ChuNhat.
Ví d 3-1 S dng enum Ngay
using System;
public class EnumTest
{
enum Ngay {Hai, Ba, Tu, Nam, Sau, Bay, ChuNhat };
public static void Main()
{
int x = (int) Ngay.Hai;
int y = (int) Ngay.Bay;
Console.WriteLine("Thu Hai = {0}", x);
Console.WriteLine("Thu Bay = {0}", y);
}
}
Kt qu
Thu Hai = 0
Thu Bay = 5
Nhng c s ca ngôn ng C# Gvhd: Nguyn Tn Trn Minh Khang
15
Mc đnh enum gán giá tr đu tiên là 0 các tr sau ln hn giá tr trc mt đn v,
và các tr này thuc kiu int. Nu mun thay đi tr mc đnh này ta phi gán tr
mong mun.
Ví d 3-2 S dng enum Ngay (2)
using System;
namespace ConsoleApplication
{
enum Ngay: byte { Hai=2,Ba,Tu,Nam,Sau,Bay,ChuNhat=10 };
class EnumTest
{
static void Main(string[] args)
{
byte x = (byte)Ngay.Ba;
byte y = (byte)Ngay.ChuNhat;
Console.WriteLine("Thu Ba = {0}", x);
Console.WriteLine("Chu Nhat = {0}", y);
Console.Read();
}
}
}
Kt qu:
Thu Ba = 3
Chu Nhat = 10
Kiu enum ngày đc vit li vi mt s thay đi, giá tr cho Hai là 2, giá tr cho Ba
là 3 (Hai + 1) …, giá tr cho ChuNhat là 10, và các giá tr này s là kiu byte.
Cú pháp chung cho khai báo mt kiu enum nh sau
[attributes] [modifiers] enum identifier [:base-type]
{
enumerator-list
};
attributes
(tùy chn): các thông tin thêm (đ cp sau)
modifiers (tùy chn): public, protected, internal, private
(các b t xác đnh phm vi truy xut)
identifer: tên ca enum
base_type (tùy chn): kiu s, ngoi tr char
enumerator
-
list
: danh sách các thành viên.
3.2.4 Chui
Chui là kiu dng sn trong C#, nó là mt chui các ký t đn l. Khi khai báo
mt bin chui ta dùng t khoá string. Ví d khai báo mt bin string lu chui
"Hello World"
string myString = "Hello World";
3.2.5 nh danh
nh danh là tên mà ngi lp trình chn đi din mt kiu, phng thc, bin,
hng, đi tng… ca h. nh danh
phi
bt đu bng mt ký t hay du “_”.
nh danh không đc trùng vi t khoá C# và phân bit hoa thng.
Nhng c s ca ngôn ng C# Gvhd: Nguyn Tn Trn Minh Khang
16
3.3 Biu thc
Bt k câu lnh đnh lng giá tr đc gi là mt biu thc (expression). Phép gán
sau cng đc gi là mt biu thc vì nó đnh lng giá tr đc gán (là 32)
x = 32;
vì vy phép gán trên có th đc gán mt ln na nh sau
y = x = 32;
Sau lnh này y có giá tr ca biu thc x = 32 và vì vy y = 32.
3.4 Khong trng
Trong C#, khong trng, du tab, du xung dòng đu đc xem là khong trng
(whitespace). Do đó, du cách dù ln hay nh đu nh nhau nên ta có:
x = 32;
cng nh
x = 32;
Ngoi tr khong trng trong chui ký t thì có ý ngha riêng ca nó.
3.5 Câu lnh
Cng nh trong C++ và Java mt ch th hoàn chnh thì đc gi là mt câu lnh
(statement). Chng trình gm nhiu câu lnh, mi câu lnh kt thúc bng du “;”.
Ví d:
int x; // là mt câu lnh
x = 23; // mt câu lnh khác
Ngoài các câu lnh bình thng nh trên, có các câu lnh khác là: lnh r nhánh
không điu kin, r nhánh có điu kin và lnh lp.
3.5.1 Các lnh r nhánh không điu kin
Có hai loi câu lnh r nhánh không điu kin. Mt là lnh gi phng thc: khi
trình biên dch thy có li gi phng thc nó s tm dng phng thc hin hành
và nhy đn phng thc đc gi cho đn ht phng thc này s tr v phng
thc c.
Ví d 3-3 Gi mt phng thc
using System;
class Functions
{
static void Main( )
{
Console.WriteLine("In Main! Calling SomeMethod( ) ");
SomeMethod( );
Console.WriteLine("Back in Main( ).");
}
static void SomeMethod( )
{
Nhng c s ca ngôn ng C# Gvhd: Nguyn Tn Trn Minh Khang
17
Console.WriteLine("Greetings from SomeMethod!");
}
}
Kt qu:
In Main! Calling SomeMethod( )
Greetings from SomeMethod!
Back in Main( ).
Cách th hai đ to các câu lnh r nhánh không điu kin là dùng t khoá: goto,
break, continue, return, hay throw. Cách t khóa này s đc gii thiu trong các
phn sau.
3.5.2 Lnh r nhánh có điu kin
Các t khóa if-else, while, do-while, for, switch-case, dùng đ điu khin dòng chy
chng trình. C# gi li tt c các cú pháp ca C++, ngoi tr switch có vài ci tin.
3.5.2.1 Lnh If else …
Cú pháp:
if ( biu thc logic )
khi lnh;
hoc
if ( biu thc logic )
khi lnh 1;
else
khi lnh 2;
Ghi chú: Khi lnh là mt tp các câu ln trong cp du “{…}”. Bt k
ni đâu có câu lnh thì đó có th vit bng mt khi lnh.
Biu thc logic là biu thc cho giá tr dúng hoc sai (true hoc false). Nu “biu
thc logic” cho giá tr đúng thì “khi lnh” hay “khi lnh 1” s đc thc thi,
ngc li “khi lnh 2” s thc thi. Mt đim khác bit vi C++ là biu thc trong
câu lnh if phi là biu thc logic, không th là biu thc s.
3.5.2.2 Lnh switch
Cú pháp:
switch ( biu_thc_la_chn )
{
case biu_thc_hng :
khi lnh;
lnh nhy;
[
default :
khi lnh;
lnh nhy; ]
}
Biu thc la chn là biu thc sinh ra tr nguyên hay chui. Switch s so sánh
biu_thc_la_chn vi các biu_thc_hng đ bit phi thc hin vi khi lnh
nào. Lnh nhy nh break, goto…đ thoát khi câu switch và bt buc phi có.