ngắn gọn và dể hiểu tác giả đâ cố gắng dựa vào kinh nghiệm giảng dạy cũng như các bài giảng đã được soạn và chinh lý để cuốn sách được hoàn thiện hơn.Cuốn sách này đưỢc xuất bản lần đầu
Trang 3Công ly cổ phẩn Sắch Đại học - Dạy nghể - Nhà xuất bản Giáo dục Việt Nam gỉữ quyển công bế tác phẩm.
Trang 4L ờ i q iớ i rh iệ u
Đầu thế kỷ XXI, Microsoít đite ra một bộ Visual Studio ,NET (VS 7.0),
Có thể nói từ v s 2001 đến v s 2 0 0 3 đã có một bước cải tiến đảng kể vể
nội dung, Bộ Visual Studio 6.0 (với các ngôn ngữ Visual Basic 6.0, Visual C++ 6.0, ASP 3.0, ) đâ đem lại cho lập trình viên nhiều thuận tiện và lợi ích Tuy nhiên khi bộ Visual Studio NET đưỢc công bố thi mọi ngư<M đã chưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ Bộ Visual Studio 2003 đã chiếm tĩnh vi trí đáng kể trong mấy năm gán đáy Từ đầu
mọi ngưíỉí đã thử nghiệm sử dựng bộ NET 2005 này Tính từ 2001 đếh
2006 ba bộ NET: 2001; 2003; 2005 íần lượt ra đcổ Độĩ ngũ lập trinh viên không còn lạ với chúng và hầu hết các sinh \àên ngành Công nghệ thông tin, ngành Điện, Điện tử, Cơ khí, Kinh tế đã bắt đầu học tập, nghiên cứu sử dụng chúng Các trường và trung tâm hợp tác quốc tế như
"Hà Nội Genetic - Singapore", các tm ng tâm của Austraiia, Pháp, Mỹ, Ân
Độ ở Hà Nội ửùinh phố Hổ Chí Minh hầu như giảng dạy cho sinh viên vcfi
tỷ lệ phần trẫm rất cao về bộ Visual Studio NET
thuật, kinh tế nói chung và cúa các sinh viên ngành Công nghệ thòng tin
nghiệm giảng dạy từ năm 2002 đến nay về bộ NET, tác giả biên soạn tài liệu này nhằm đáp ứhg phẩn nào cho các đối tượng trên
Nêu các bạn đã có kiến thức về lập trinh C /C + + hoặc Javá thi việc
dành cho sinh viên và các bạn tự học, do đó tài liệu đã cố gắng trinh bày thật dễ hiểu và ngắn gọn nhất
Lđp tr ìn h c # t ừ c ơ b â n đ ế n n â n g c a o bao gồm các lệnh chu
trinh, điểu kiện, lựa chọn, về phương thức hay "hàm", lớp, ửiừỉỉ kế, nạp chồng hàm và toán tử trùng tên uỷ nhiệm, quản lý sự kiện, đa luồng (multithreading) v.v
trong nước Tuy nhiên để có một tài liệu tự học tham khảo nhanh,
Trang 5ngắn gọn và dể hiểu tác giả đâ cố gắng dựa vào kinh nghiệm giảng dạy cũng như các bài giảng đã được soạn và chinh lý để cuốn sách được hoàn thiện hơn.
Cuốn sách này đưỢc xuất bản lần đầu cho nẻn không thể tránh khỏi khiếm khuyểt Tác giả rất mong các bạn đồng nghiệp gần xa các sinh viên sử dụng bộ sách này đóng góp ý kiến để lần tái bản sau được hoàn chinh hơn Cuối cùng tác giả cũng có một lời mách nhỏ là tắt cả các chương trình trong sách đều đã chạy tốt trêii máy PC có cài đạt bộ Visual Studio 2 0 0 3 và các bạn hãy cố gắng tự mỉnh đánh vào máy đề kiểm tra kết quả đây cũng là một phương pháp tự học rất hiệu quả mà trong bao năm qua tác giả và đổng nghiệp đã sử dụng.
Mọi ý kiến góp ý và thư từ xin gửí về Công ty CP Sách ĐH - DN, 25
Hàn Thuyên, Hà Nội, hoặc email: pcongngo@yahoo.com vn
TÁC GỈẢ
Hà Nội, 15 - 8 - 2 0 0 7
Trang 6C hư ơN q 1 C ác nét c ơ bẢN CỦA c #
thùầ từ các ngôn ngữ lập trình hưé^g đối tưcrtig quen thuộc khác như CTT Java
được xây dựtìg từ mộí nhóm các kỹ sư phần mềm của Microsoít
do hai ngưâri lãnh đạo là Anders Hejlsberg và Scott Wiltamuth.
và môi trường "windows form" Để giới thiệu một chương trinh đầu tiên
làm ví dụ, các bạn phải cài đạt bộ Visual Studio ,NET (2003) trong Windows 2 0 0 0 hoặc Windows XP
- Nhấn Start -> Program trong
WừKÌows Chọn Mlcrosoít Studio WừKÌows NET 2003
- Từ menu File -> New —> Project
Nev> ẵữkỉbon I O>nsoỉe«%ppỉicoocti2 w Creat9 dlr«ctory fúr Sứlubdn
y/dl b« cre9(<đ d( C : '.9effCữcO6<,Conso<«Applic«DOA2\COQ«DỉeAp0UKWt2.
Hình 1.1
Trang 7Trong hình 1.1, phía trái Project Types chọn Visual c*f Project ở
phía phải Templates, chọn Console Application,
- Tại Textbox có nhãn Name; p rg l
- Tại Textbox có nhãn Location: C :\tu hoc csharp
- Nhấn nút OK.
Sau đó nhấn đồng thcrt 2 phím Ctrl + A đ ể lự& chọn toàn bộ rồi bấm phím Delete
Cuối cùng bạn gõ vào văn bản chương trình sau:
Ví dụ 1.1. Viết chưcmg trinh hiển thị trẽn màn hình dòng chữ: "Hello world !”
Trang 8Tên biến, biểu thức hoặc phương thửt (hay hàm) chỉ được sử dụng
6 3 kí tự trên mới hợp lệ, Ví dụ: Hanoi; HANOI; _Hanoi; Ha_noi
^!5v.Cỉiú ý;
+ C hử số 0.1 9 không được phép đặt vị trí đầu tiên của tên biến.+ Tên biến không đưỢc phép đặt trùng với các từ khoá (keyword)
hoàn toàn vtì ngôn ngữ Pascal)
1.3 T ừ K H O Á (KEYVVORD)
Bàng 1.1 Từ khoã cùa ngôn ngữ c#
Trang 9bool 1 Booleon Già tfỊ logic true/ false
sbyte 1 Sbyte SỐ nguyên c ố đâu: -128 + 127
short 2 Intló SỐ nguyên c ố ctóu giã trị: -32768 -r 32767 ushort ' 2 Uintìó SỐ nguyên không ddu: 0 -ỉ- 65.535
2.14^483.647 uint 4 Uint32 SỐ nguyên không dốu: 0 -i- 4.294,967.295 íloat 4 Singíe Kiểu dốu châm động giá ừ xấp xỉ tù
3.4E-38 đến 3,4E+38rvoì 7 chữ sổ có nghĩa
đouble 8 Double Kiểu ddu chốm động c ỏ độ chính xỏc
gâ’p đôi, giá ừ xốp xỉ to 1.7E-308 đến l,7E+308,với IS lỏ c h ữ s ố c ố n g h ía
d e clm a l 8 Decimal C ố độ chính xốc đến 28 con số và giở fr|
thi*ip phân, đưoc dùng trong tính toán tài chính, kiểu này đỏi hỏi phài c ó hộu tố "m" hay "M" theo sau già trị.
-9,223.370.036,054,775,808 -í- 9.223.372.036.854.775.807
ulong 8 Uint64 SỐ nguyèn không đđu: 0 -f Oxffffmfffffffff
1.5 KHAI BÁO BĨẾN pEC LA R A TIO N )
kiểu b iâ i ỉ , biến 2 = giá trị;
int a , b = 2;
double X = 1 4 5 6 3 7 8 , y, &
string s = ''Hanoi”;
Trang 10(viết hoa) Ví dụ; íloat f l = 1.2589F;
- Các kiểu biến khác không nhất thiết phải ghi thêm Có thể bỏ chữ
+ +-Ì, Í+ + lã n g gió trị i lên 1 đon vị
—i; i - giòm giã trị i xuống 1 đon VỊ
Ví dụ;
int a = 16 b = 3;
int q l * a + b; kết quả q l = 19:
9 2.LẬPT1ÚNH NC>
Trang 11int q2 = a / b; kết quả q2 ® 5;
int q3 = a % b; kết quả q3 = 1;
double q4 = (doubie) a/b; kết quả q4 = 3 2
kiểu viết iệnh gán ngắn gọn:
Trang 131.10 K ĩỂ u LIỆT KÊ (ENUM )
Cú pháp kiểu liệt kê phải đặt từ khoá enum lẻn đầu:
enurn E 1 { a, b, c = 15, d, e} ;
Trong đó E1 !à tên biến có kiểu enum fliệt kê):
c lấy giá trị 15
Trang 14Console.WriteLine (”Gia tri b » ’’+ {int)E1 b);
Console.WriteLine (*’Gia tri d » *'+ {int)El-d);
1.11 KIÊU CẤU TRÚC - STRUCT
tất cả các biến có kiểu public đặt trên class và dưới using System
Trong hàm Main 0 ta khai báo các biến có kiểu struct và gán trựt tiếp dữ liệu cho các biến struct qua toán tử chấm {dot operator)
Trang 15s Ví dụ 1.4.
using System;
public struct stl
{
public string ten;
public int mâso;
double t ,) mat * new double [ 3,3) ;
Mục này ta chỉ nêu kiểu khai báo mảng Đ ể hiểu về mảng các bạn xem ờ chương 5.
14
Trang 16ChươNq 2 X uất NhẬp d ữ liỆu
string str * "Ha Noi” /
Console Hriteline (*‘a = b * ” +b);
string s;//khai bảo chuỗi ký tự s
int n;//khâi báo biến nguyên n
Hay: n » i nt Parse (Console.ReadLine ());
ứ n g với m ột kiểu khai báo phải có m ột lệnh tương ứhg Sau đây ta nêu iẽn bảng liệt kẻ của kiểu khai báo vcfi lệnh chuyển đổi chuỗi n h ập từ
bàn phím.
15
Trang 17shorta a = intló.Parse (Console.ReađLineO);
ushort a a = Ulntlố.Parse (Consoie-ReadllnôO); unit a a = Ulnt32.Parse(Console,ReaơLineO); long a a = !ntó4.Parse (Consoie.ReadLineO); uiong a a = Ulnt64,ParseCConsole,ReadLineO); string s s = Console.ReađLineO;
int ID; //ma so
string narae; //ten
float salarỵ; //luong
uĩong tel; //díen thoai
tel = UỊrít64.Parse(Console.ReadLine0);
Consolẹ.Write ("Ma SOĨ "+ID);
16
Trang 18Console.Wríte{"; Ten: ”+namet;
Console.Write(” ; Luong: ”+salary);
Console.VỉriteLine {'•; So dien thoai; "+tel);
Console.ReadLine0;// doi go mot phim
S ksí quá:
Nhap ma so: 111
Nhap ten; An
Nhap luong: 2000
Nhap so dien ỉhoai: 8676432
Ma so: 111; Ten: An; Luong: 2000; So dien thoai: 8676432
Trang 19ChươNq f , C á c lệ N h đ ỉỀ u khiỂ N
Các lệnh điều khiến được chia làm ba nhóm:
- Lệnh iặp hay lệnh chu trình
Ví dụ: for (int i = 0; i < 5; i++) {}
dụ 3 1 Sử dụng vòng lạp for đ ể hiển thị bình phưcftig của số
using System
class LoopForl
{
statỉc void MaiTiO
for (int i ■ 0; i <3 10; i++)
Console.writeLine ("i «= **+i+"; i*i »
Console.ReadLine ();
Trang 20Vòng lặp for còn thực hiện vóí các biểu thút p h ú t tạp Trong ba biểu
thay đổi có thể chứa nhiều biểu thức con và chúng tách nhau bc^ dấu phẳy còn biểu thức điều kiện thi có các phép toán quan hệ như && (và);
Vòng lặp for còn thựd hiện vófi biểu ứìứt có kiểu íloat, double
Trong vòng íor lệnh thay đổi được viết:
for (double i = 0; i <= 2; i = i+0.1)
3.1.2 Vòng lộp d o whỉle
Vòng lặp d o whiie cũng có 3 biểu thứC:
- Biểu ứiức khctì tạo
19
Trang 21- Biểu thức thay đổi {sau khi thựt hiện lệnh).
- Biểu thứt kiểm ữa điều kiện Nếu điều kiện thoẩ mãn (đúng) thi vòng lặp thựt hiện còn nếu điều kiện không ứíoả mãn (sai) thi vòng lặp kết thúc.
dụ 3 3 Tính binh phương giá trị i vcft bước thay đổi bằng 0.2 từ 0
Console.WriteLine (" i “ "+i+"; i*i «
i+ ® 0.2; //lenh thay doi
Trang 22- Biểu thứt kiểm tra điều kiện.
Điểm khác biệt của 2 vòng lặp này lầ lệnh d o while sẻ kiểm tra điểu kiện sau còn lệnh while kiểm tra điểu kiện tniớc rổi mcfi đến thụt hiện lệnh.
Trang 23int i = Console.WriteLine(” i = "+i+“ ; j = "+j);
Lệnh íoreach thường sử dụng cho mảng Cú pháp lệnh íoreach:
foreach (kiểu tên in biểu thức lệnh)
I
{
// lenh;
Trong đó in là từ khoá
bao gồm cả số lẻ và số chẵn Hãy hiển thị số lư<;mg các số ỉẻ và số lượng các số chẳn có trong m ảng đó
int [ ] arr = new intí 5] i 1, 4, 3, 6, 5} ;
int odd = 0, even “ 0;
foreach (int m in arr)
Trang 24Console WriteLine (" So phan tu le odd = ''+odd);
Consoie.WriteLineC'So phan tu chan even = "+even);
Trang 26using System;
class If
{
static voịd MainO
int diem/ //diem
Console.write ("Nhap diem: " ) /
điem ® Int32.Parse(Console.ReadLine0);
if((diem >— 0) 5t& (diem < 5))
Console.WriteLine (" Xep loai c.” )/
if((diem >— 5) (diem < 8))
Console.WriteLine (*’Xep loai B.");
4 l Ạ pti « nh ì « ca 25
Trang 27if{(diein> = 8) && (diem < = 10))
Console.WriteLine("Xep loai A.");
class IfNested //if long nhau,
static void Main 0
Trang 28Consoie.VirỉteLine r Diem khong hop le/');
Console,ReadLine();
3.2.2 Sủ dụng lệnh rút gọn cho if- else
Khi viết cáu lệnh:
if (x > y) max = X
else max = y;
max = (x > y ? X : y ) ;
3.3 LỆNH LỤA C H Ọ N (SWITCH CASE)
Console-Write ('* Nhap so a,b: *');
a = D ouble, P arse (C o nso le.R e ad Line ( ) ) ;
b = D o u b ie P arse (C o nso le.R e ađ Line ( J) ;
Trang 29Console.W riteLine(” 3 Nhan.*’ );
Console.WriteLiner* 4 Chia.” ) ;
C onsoie,W riteLiner 5* Thoat/M ;
pt * In t3 2 Parse (Console ReadLine 0 );
Câse 5: continue;
w h ile(p t 5);
Trang 31-s t a t i c voiđ Hienthi(đouble a, doubie b, double m)
//Ham kieu void c h i co đoi so "vao”
Console VíriteLine (*' a “ " +a+" ; b* +b);
â ■ N h â p ();//g o i ham V â gan cho bien a
b » N h a p O ;//g o i hara va gan cho bien b
m ® Tìiìhía, b ) ; / / g o i haiĩi va gan cho b ie n moi
H ienthl(a, b/ m);//ham kieư voiđ khong co lenh gan Console ReadLine();
Trang 34A X 1'RUYẾN ĐỖI SỐ KlỂu THAM CHIẾU c ó TỪ KHOÂ REF
Trang 35■ 'ỈS N h ậ n xét: N h ìn v à o k ế t q u ả ta th ấ y b ê n tr o n g h à m h o á n đ ổ i, c á c g iá tri c ụ a a v à b đ ư ợ c h o á n đ ổ i c h o n h a u T u y n h iê n s a u k h i h o á n đ ổ i, g iá tri
c ủ a a v à b iạĩ n h ư trư ớ c k h i h o á n đ ổ i, n g h ĩa là a = 1 0 v à b = 2 5 Đ iể u n à y
c ó n g h ĩa là h à m " H o a n đ o i" k h ô n g c ó tá c đ ụ n g h o á n đ ổ i
C á c <5ối s ố c ủ a h à m " H o a n d o i'' k h ô n g s ử d ụ n g " th a m c h iế u ” m à c h l
là c á c 'g iá tri th ô n g thư c^ig
Consoie.H rite (" Nhap a, b: ■');
a = double Parse (Console.ReadLine 0 );
b = doiứsle Parse (Console Re:adLine ( ) ) ;
Trang 36Khi gọi h àm "Hoandoi", các biến a, b c ó th ể gán giá trị 0 , cũng có
Trang 38T ử k h o á o u t đ ư ợ c s ử d ụ n g n h ư từ k h o á r e í c h ỉ c ó m ộ t đ iể m k h á c b iệ t
là khi s ử d ụ n g từ k h o á o u t ta c h ỉ c ầ n k h ai b á o b iế n th a m c h iế u m à k h ô n g
c ẩ n g á n g iá trị T a v iết lại c h ư c m g trìn h c ủ a ví d ụ 4 5 với từ k h o á o u t
doubie a, hf m; //Khong can gan g ia t r i
Input(out a,* out b ) ;
C a lc u la te (a , b, out m);
4,3.2 ĩù khoó o u t
37
Trang 40ChươNq Lớp TRONq lẬp TRÌNh
hưỚNq đôi TưỢNq c # (cU ss)
T ừ ch ư cm g n à y tr ở đi, c á c c h ư ơ n g trin h đ ư ợ c viết th e o p h ư ơ n g p h á p
#
lậ p trin h h ư ớ n g đ ố i tư ợ n g L ậ p trìn h h ư ớ n g đ ố i tư ợ n g (O O P : O b je c t
O r ie n te d P ro g ra m m in g ) là m ộ t p h ư ơ n g p h á p d ự a v à o k h á i n iệ m v ể lớ p vả
đ ố i tưcftng L ớ p là m ộ t k iểu mcrt L ớ p c h ứ ồ n h iề u đ ố i tư ợ n g V í d ụ m ộ t lớ p
ô tô c ó n h iề u đ ố i tư ợ n g là c á c lo ại ô t ô k h á c n h a u L o ại ô tô đ ó là m ộ t đ ố i tưỢ ng G iố n g n h ư m ộ t s in h v iề n là m ộ t đ ố i tư ợ n g c ủ a m ộ t lỏ p h ọ c M ột
p u b iic void InputO;
p u b lic void Show();
39
Trang 42Console.Write ("Enter age: **);
age » Int32.Parse (Console.ReadLineO );
-p u b lic s t a t i c void MâinO
person p = new personO ;
nam e: Mai; age; 25; saiary: 10Ũ0
5.1 HÀM TẠO (CONSTRUCTOR METHOD)
Khi khai báo m ột biếh, ta có th ể gán giá trị cho biến Ví dụ:
in t a, b = 5;
H àm tạ o ià m ộ t hàm đặc biệt được dùng đ ể khcrt tạo d ữ liệu c h o đối
Trang 44p e r s o n vcrt c á c d ữ liệu g á n lú c k h a i b á o n a m e : "M ai”, a g e ; 2 5 , salary:
1000.
H iể n th ị d ữ liệu c h ỉ c ầ n lấ y đ ố i tư ợ n g p fru y c ậ p h à m show O q u a
t o á n tử c h ấ m : p.show O ;
K hi đ ịn h n g h ĩa h à m tạ o c ó đ ố i s ố , ta d ù n g to á n t ử "this" n ế u tê n c á c
đ ố i s ố tr ù n g tưcrtig ứ n g v c í tê n c á c b iế n p riv a íe ở b ê n tro n g ló ^ N ế u tê n
c á c đ ố i s ố n à y k h á c (ÍI, ta k h ô n g c ầ n d ù n g to á n tử " t h i s H à m t ạ o sa u đ â y
c ó đ ố i s ố , k h ô n g d ù n g to á n tử th is h o à n to à n tư tm g đ ư ơ n g vctì h à m tạ o đ ã
43