You are on page 1of 73

Su tm v edit bi Oki@kimur@

Gii thiu v kha hc C# cn bn


C# l mt ngn ng mm do v rt ph bin hin nay. Nhiu lp trnh vin la chn ngn ng ny cho cc ng dng ca mnh bi s thn thin v nhng tnh nng mnh m n h tr. Bn c th yn tm khi s dng C# vit cc phn mm desktop hay cc ng dng web. Kha hc C# cn bn ca chng ti s gip bn tip cn vi ngn ng ny. Cc bn hy hnh dung hc mt ngn ng lp trnh ging nh vic hc mt ngoi ng. Bn phi lm quen vi cc quy tc din t, cc cu trc ng php ca ngn ng . Lc u s c rt nhiu kh khn nhng cng tip cn bn s thy n rt thn thin v t nhin. Vi C# ,u tin cc bn chc s gp nhiu b ng, nhng ch sau kha hc ny, bn c th t tin s dng C# vit ra nhng ng dng nh, s dng ngn ng ny gii quyt nhiu bi ton thc t. y cng l nn tng bn tip tc hc v s dng nhng cng ngh cao hn. Kha hc C# cn bn nm trong chng trnh hc v cng ngh .Net. Sau kha hc ny bn s s dng thnh tho ngn ng C#, hiu r hn cc khi nim trong lp trnh hng i tng , v c bn nm bt c cc kin thc nn tng ca ca cng ngh .Net. T , bn c th t tin tip cn vi nhng kin thc cao hn trong cng ngh .Net. Chng ti s ln lt gi ti bn nhng kin thc c bn nht t quy tc t tn, cch vit cu lnh, cc cu trc lnh trong C# n cc kin thc v hng i tng trong ngn ng ny. chun b cho kha hc ny, bn cn tm hiu mt cht v .Net Framework ,b Visual Sutdio.Net 2005, cch ci t v s dng n.

DANH MC BI HC: Phn 1: Tm hiu ngn ng C# Bi 1: Gii thiu v ngn ng C#- Hello C# Bi 2: Cc kiu d liu trong C#. Bin, hng v cch s dng Bi 3: Kiu Enumerator Bi 4: Kiu mng v kiu chui k t Bi 5: Cc cu trc lnh trong C# Bi 6: Ton t Bi 7: X l ngoi l: Cc lnh throw ,try- catch, finally.

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Phn 2: Hng i tng trong C# Bi 8: Lp v i tng Bi 9: Methods v cc vn lin quan Bi 10: Overloading methods Bi 11: Constructor v Destructor Bi 12: Iheritance Bi 13: Overriding Method Bi 14: Polymophism Bi 15: InterFace Bi 16: Struct Bi 17: NameSpace

Phn 3: n tp Bi 18: n tp phn ngn ng C# Bi 19: n tp phn hng i tng trong C#

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

Bi 1: Gii thiu v ngn ng C#- Hello C#


Trc tin chng ta hy cng tm hiu mt ng dng n gin nht ca C# thng qua mt ng dng n gin Hello C#. u tin cc bn m Visual Studio.Net 2005 chn File-> New-> Project v chn ng dng Console Application

Cc bn g tn ca ng dng vo text Name. Chn ni lu tr ng dng bng cch Browse n th mc bn mun lu.

Sau khi nhn chn OK v ca s son tho ng dng xut hin, bn son tho chng trnh nh sau:

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

Nhn F5 hoc s dng thc n (menu) Debug > Start Debugging thc thi chng trnh:

Kt qu c hin th nh sau:

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Bn thc hin hon tt mt ng dng c xy dng trn nn tng cng ngh .NET vi ngn ng C#. Chng ta cng tm hiu v ni dung ca chng trnh. Khai bo cc lp th vin c s using System; using System.Collections.Generic; using System.Text; y l phn khai bo cc lp th vin c s ca .Net cho chng trnh. Cc lp th vin c s c cha cc hm m cc bn c th s dng c ngay. khai bo cc th vin ny cc bn phi s dng t kha using. Namespace v Class Mi i tng ca mt chng trnh C# u phi t trong mt class (hay lp ) v cc class ny s c t trong mt Namespace (dch ra ting vit l khng gian tn). Cc Namespace phi c tn khc nhau, cc class trong cc namespace khc nhau th c th trng tn. Khi tn cc class s c phn bit bi namespace cha n. Mt v d m phng v Namespace v Lp l: H Ni v Tp.HCM u c ng mang tn Trn Hng o, nhng r rng l con ng Trn Hng o hai ni hon ton khc nhau mc d vn c chung tn Trn Hng o. Vy ta ni H Ni v Tp.HCM l hai namespace cha hai lp c cng tn "Trn Hng o". Cc bn s c tm hiu k v 2 khi nim ny cc bi hc sau ca chng ti trong phn Lp trnh hng i tng (OOP). Ton t . Nh vy gi mt bn Hoa bn phi gn vo lp hc ca bn y Hoa lp tin 1 chng hn. C# cung cp cho bn mt ton t dng gi ra cc lp ca mt namespace l ton t .. Nu mun gi ra mt lp trong mt namespace bn s dng c php sau:

Namespace.Class
V d HANOI.TranHungDao, vit nh th ny ch n con ng Trn Hng o ti H Ni, hon ton khc vi con ng TranHungDao o TPHCM c vit vi dng TPHCM.TranHungDao.

S dng lp System.Console nhp/ xut d liu. Lp System.Console y l lp thng ng s dng trong cc chng trnh Console c v ghi ra mn hnh cc gi tr text. 5 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

chng trnh, chng ta s dng: Console.WriteLine("Chao mung ban den voi The gioi C#"); //ghi d liu ra mn hnh Console.ReadLine(); //c d liu Mt s hm thng dng

Console.Read(): c d liu t bn phm Console.ReadLine(): c d liu t bn phm v a con tr xung dng di. Console.Write(): Ghi d liu ra mn hnh Console.WriteLine(): Ghi d liu ra mn hnh v xung dng. Cu lnh v khi lnh T chng trnh u tin trn, cc bn phn no hnh dung c v ngn ng C#. Cc bn hy hnh dung cu lnh trong lp trnh ging vi mt cu vn trong vn bn. N cng cn tun theo nhng quy tc nht nh. Nu ngn ng trong i sng bn phi din t cho mi ngi xung quanh hiu th trong ngn ng lp trnh mt cu lnh c vit vi mc ch lm cho trnh bin dch hiu. Chng ta tun th mt s quy tc sau khi lp trnh vi ngn ng C#: Cu lnh trong C# lun c kt thc bng du ; Bn c th c mt on vn gm nhiu cu vn din t mt ni dung no . Bn cng c th gom nhiu cu lnh thnh mt khi lnh lm mt cng vic. Bn c th gom li thnh mt khi nh sau: { Cu lnh 1; Cu lnh 2; Cu lnh 3; } Khi lnh s c t trong cp du mc n {}

Luyn tp: To mt ng dng c tn l Hello World lu trong th mc l tn ca bn trong cng. Trong in ra 2 dng: Hello World! 6 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Welcome to C# World! Bi 2: Cc kiu d liu trong C#. Bin, hng v cch s dng 1. Cc kiu d liu trong C# C# chia thnh hai tp hp kiu d liu chnh: Kiu xy dngsn (built- in) m ngn ng cung cp cho ngi lp trnh v kiu c ngi dng nh ngha(user-defined) do ngi lp trnh to ra. C# phn tp hp kiu d liu ny thnh hai loi: Kiu d liu gi tr (value) v kiu d liu tham chiu (reference). Bn c th chuyn i t kiu d liu ny sang kiu d liu khc qua vic boxing v unboxing(Ti s gii thiu vi bn phn sau ca bi hc ny) Bng cc kiu d liu xy dng sn

C# Data Type object

M t kiu d liu c bn ca tt c cc kiu khc c s dng lu tr nhng gi tr kiu ch cho bin S dng lu tr gi tr kiu s nguyn s dng lu tr gi byte S dng lu tr gi tr s thc Cho php mt bin lu tr gi tr ng hoc sai Cho php mt bin lu tr mt k t

string

int

byte float bool

char

Ghi ch: Tt c cc kiu d liu xy dng sn l kiu d liu gi tr ngoi tr cc i tng v chui. V tt c cc kiu do ngi dng nh ngha ngoi tr kiu struct u l kiu d liu tham chiu. trong bi hc ny chng ta s tm hiu cc kiu xy dng sn.
2. Bin v Hng a. Bin Mt bin l mt vng lu tr vi mt kiu d liu. to mt bin chng ta phi khai bo kiu ca bin v gn cho bin mt tn duy nht. Bin c th c khi to gi tr ngay khi c khai bo, hay n cng c th c gn mt gi tr mi vo bt c lc no trong chng trnh. 7 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

Cc bin trong C# c khai bo theo cng thc nh sau:

AccessModifier DataType
Trong :

VariableName;

AccessModifier: xc nh u tin truy xut ti bin Datatype: nh ngha kiu lu tr d liu ca bin VariableName: l tn bin
Cp truy xut ti bin c m t nh bng di y

Access Modifier public protected

M t Truy cp ti bt k ni u Cho php truy xut bn trong mt lp ni bin ny c nh ngha, hoc t cc lp con ca lp . Ch truy xut bn trong lp ni m bin c nh ngha.

private

V d bn khai bo mt bin kiu int int bien1; Bn c th khi gn ngay cho bin trong lc khai bo int bien1 = 9; hoc c th gn gi tr sau khi khai bo nh sau: int bien1; bien1 = 9; Cch khai bo bin tng ng vi cc kiu d liu: C# Data Type object string int byte 8 V d object obj = null; string str = "Welcome"; int ival = 12; byte val = 12; http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ float bool float val = 1.23F; bool val1 = false; bool val2 = true; char char cval = 'a';

V d sau s minh ha cch s dng bin: using System; using System.Collections.Generic; using System.Text; namespace SuDungBien { class MinhHoa { static void Main() { int bien1 = 9; // khai bo v khi to gi tr cho mt bin System.Console.WriteLine("Sau khi khoi tao: bien1 ={0}", bien1); bien1 = 15; // gn gi tr cho bin System.Console.WriteLine("Sau khi gan: bien1 ={0}", bien1); Console.ReadLine(); } } } Cc bn hy ch n mu sc ca on code trn. Cc ch c mu xanh dng l t kha, phn vn bn mu xanh lc sau du s cho // l cc ch thch, phn text nm trong du c mu l cc k t. Lnh Write v WriteLine c phn bit vic in ra mn hnh bin v k t. Sau y ti s ln lt gii thch cc khi nim trn. T kha Trong cuc sng, mi ngn ng u cha nhng t kha v nhng t ny hiu c bi ngi ni ra n. iu cng ng vi C#. T kha trong C# l nhng t c bit v mang ngha c bit ch dnh ring cho ngn ng ny. Trong VS.net nhng t kha ca C# s c mu xanh ra tri. trong v d trn cc t kha l using, namespace, int Tn v quy tc t tn trong C# Mi s vt hin tng trong cuc sng u c tn gi phn bit vi nhau v iu cng ng i vi mt chng trnh my tnh. Mi i tng ca chng trnh C# u c tn. Bn c th t tn cho bin, cho hm, cho lp v cho cc namespace. Ch rng C# l ngn ng phn bit ch hoa ch thng. V d bn khai bo 2 bin kiu int 9 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

int bien1; int Bien1;

Th 2 bin ny l 2 i tng khc nhau. Khi bn t tn cn ch n cc nguyn tc sau: (/) Cch vit ch thch Ch thch trong chng trnh C# l nhng phn text lm r hn cho phn code ca lp trnh vin. Ch thch khng c c bi trnh bin dch, n khng lin quan g n chng trnh ca bn C 2 cch vit ch thch trong C#: Nu ch thch trn mt dng bn t phn ch thch sau 2 du s cho // ch thch Nu ch thch trn nhiu dng bn t p hn ch thch trong cp /* */ c th /* ch thch*/ Cch in ra mn hnh Khi in cc k t ra mn hnh bn phi t chng trong cp du . Vy in ra bin th sao? Bn s lm theo mu sau V d bn c 3 bin :bien1, bien2, bien3 v bn mun in chng ra mn hnh. Bn s dng cu lnh: Console.WriteLine("{0} {1} {2}",bien1, bien2, bien3); K t tip theo c th ly bt k. Tn khng c trng vi t kha. K t u tin phi l mt ch ci (c th l ch hoa hoc thng) hoc l du gch di

b. Hng Hng cng l mt bin nhng gi tr ca hng khng thay i. Bin l cng c rt mnh, tuy nhin khi lm vic vi mt gi tr c nh ngha l khng thay i, ta phi m bo gi tr ca n khng c thay i trong sut chng trnh. V d, khi lp mt chng trnh th nghim ha hc lin quan n nhit si, hay nhit ng ca nc, chng trnh cn khai bo hai bin l DoSoi v DoDong, nhng khng cho php gi tr ca hai bin ny b thay i hay b gn. ngn nga vic gn gi tr khc, ta phi s dng bin kiu hng. Hng c phn thnh ba loi: gi tr hng 10 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ (literal), biu tng hng (symbolic constants), kiu liu k (enumerations). Chng ta s tm hiu v kiu lit k bi hc sau.

Gi tr hng Ta c mt cu lnh gn nh sau: x = 100; Gi tr 100 l gi tr hng. Gi tr ca 100 lun l 100. Ta khng th gn gi tr khc cho 100 c. Biu tng hng gn mt tn cho mt gi tr hng, to mt biu tng hng dng t kha const v c php sau: <const> <type> <tn hng> = <gi tr>; Mt biu tng hng phi c khi to khi khai bo, v ch khi to duy nht mt ln trong sut chng trnh v khng c thay i. V d: const int DoSoi = 100; Trong khai bo trn, 32 l mt hng s v DoSoi l mt biu tng hng c kiu nguyn. V d sau s minh ha cch s dng biu tng hng class MinhHoaC3 { static void Main() { const int DoSoi = 100; // C const int DoDong = 0; // C System.Console.WriteLine( Do dong cua nuoc {0}, DoDong ); System.Console.WriteLine( Do soi cua nuoc {0}, DoSoi ); } } Kt qu: Do dong cua nuoc 0 Do soi cua nuoc 100 Cc bn hiu c s khc nhau gia bin v hng- cch s dng chng trong C# . Ngoi ra bn cn bit th no l t kha, quy tc t tn trong C#, cch vit ch thch v cch ghi ra mn hnh k t, bin

Luyn tp 11 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

Cu hi:

1) Nhng t theo sau t no l t kha trong C#: field, cast, as, object, throw, football, do, get, set, basketball. 2) C bao nhiu cch khai bo comment trong ngn ng C#, cho bit chi tit? 3) C# chia lm my kiu d liu chnh? Nu ta to mt lp tn myClass th lp ny c xp vo kiu d liu no? Bi tp: Bi 1: Tm li ca chng trnh sau. Sa li v bin dch li chng trnh. class Bai1 { public static void Main() { double myDouble; decimal myDecimal; myDouble = 3.14; myDecimal = 3.14; Console.WriteLine(My Double: {0}, myDouble); Console.WriteLine(My Decimal: {0}, myDecimal); } } Bi 2(Tip): Boxing v Unboxing

1. Boxing Bn c th d dng hnh dung qu trnh ny thng qua tn gi ca n, ngha l mt gi tr c a vo bn trong mt i tng. Ni cch khc, boxing l nhng x l cho php kiu d liu gi tr nh (int, unint, long) c i x nh kiu tham chiu ( cc i tng). V qu trnh boxing c thc hin ngm nh. Bn hy xem hnh di minh ha v qu trnh boxing mt s nguyn:

12

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

y l chng trnh minh ha qu trnh trn. using System; class Boxing { public static void Main() { int i = 123; object o = i;

Console.WriteLine("The object value = {0}", o); Console.ReadLine(); } }

2.Unboxing

Unboxing l qu trnh ngc li vi boxing, tc l a t mt i tng ra mt gi tr . Qu trnh ny s c thc hin mt cch tng minh. V thc hin c iu ny bn cn chc chn rng i tng c boxing ng kiu gi tr a ra v sao chp gi tr t th hin hay i tng vo 13 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ bin kiu gi tr. Hnh di y m t qu trnh unboxing. Nh bn thy n ngc li vi qu trnh boxing trn

Unboxing sau khi thc hin Boxing.


y l chng trnh minh ha c qu trnh boxing v unboxing:

using System; public class Unboxing { public static void Main() { int i = 123; // Boxing object o = i; // Unboxing phi c thc hin tng minh tng minh int k = (int) o; 14 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

Console.WriteLine("k: {0}", k); } } Nu mt i tng c Unboxing l null hay l tham chiu n mt i tng c kiu d liu khc, mt lidCastException (Ngoi l) s c pht sinh. Cc bn s c hc v cch x l ngoi l bi 7 ca kha hc. Bi 3: Kiu lit k (Enumerator)

1 .nh ngha Kiu lit k n gin l tp hp cc tn hng c gi tr khng thay i (thng c gi l danh sch lit k). 2. Cch khai bo v s dng Cc bn hy xem li v d bi hc s 2 v cch s dng biu tng hng, chng ta c hai biu tng hng c quan h vi nhau: const int DoDong = 0; const int DoSoi = 100; Do mc ch m rng ta mong mun thm mt s hng s khc vo danh sch trn, nh cc hng sau:

const int DoNong = 60; const int DoAm = 40; const int DoNguoi = 20; Cc biu tng hng trn iu c ngha quan h vi nhau, cng ni v nhit ca nc, khi khai bo tng hng trn c v cng knh v khng c lin kt cht ch cho lm. Thay vo C# cung cp kiu lit k gii quyt vn trn: enum NhietDoNuoc { DoDong = 0, DoNguoi = 20, DoAm = 40, DoNong = 60, 15 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ DoSoi = 100, } Mi kiu lit k c mt kiu d liu c s, kiu d liu c th l bt c kiu d liu nguyn no nh int, short, long... tuy nhin kiu d lu ca lit k khng chp nhn kiu k t. khai bo mt kiu lit k ta thc hin theo c php sau: [thuc tnh] [b sung] enum <tn lit k> [:kiu c s] { danh sch cc thnh phn lit k } Thnh phn thuc tnh v b sung l t chn c th c hoc khng. Mt kiu lit k bt u vi t kha enum, tip sau l mt nh danh cho kiu lit k: enum NhietDoNuoc Thnh phn kiu c s chnh l kiu khai bo cho cc mc trong kiu lit k. Nu b qua thnh phn ny th trnh bin dch s gn gi tr mc nh l kiu nguyn int, tuy nhin chng ta c th s dng bt c kiu nguyn no nh ushort hay long,..ngoi tr kiu k t. on v d sau khai bo mt kiu lit k s dng kiu c s l s nguyn khng du uint:

enum KichThuoc :uint { Nho = 1, Vua = 2, Lon = 3, } Lu l khai bo mt kiu lit k phi kt thc bng mt danh sch lit k, danh sch lit k ny phi c cc hng c gn, v mi thnh phn phi phn cch nhau du phy. V d sau minh ha v cch s dng kiu lit k using System; using System.Collections.Generic; using System.Text; namespace Bien { class KieuEnum { enum NhietDoNuoc: int { 16

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ DoDong = 0, DoNguoi = 20, DoAm = 40, DoNong = 60, DoSoi = 100, } static void Main() { System.Console.WriteLine( "Nhiet do dong: {0}",(int)NhietDoNuoc.DoDong); System.Console.WriteLine("Nhiet do nguoi: {0}", (int)NhietDoNuoc.DoNguoi); System.Console.WriteLine("Nhiet do am: {0}", (int)NhietDoNuoc.DoAm); System.Console.WriteLine("Nhiet do nong: {0}", (int)NhietDoNuoc.DoNong); System.Console.WriteLine("Nhiet do soi: {0}", (int)NhietDoNuoc.DoSoi); Console.ReadLine(); } } } Kt qu: Nhiet Nhiet Nhiet Nhiet Nhiet do do do do do dong: 0 nguoi: 20 am: 40 nong: 60 soi: 100

Ch : Mi thnh phn trong kiu lit k tng ng vi mt gi tr s, trong trng hp ny l mt s nguyn. Nu chng ta khng khi to cho cc thnh phn ny th chng s nhn cc gi tr tip theo vi thnh phn u tin l 0. Ta xem th khai bo sau: enum Thutu { ThuNhat, ThuHai, ThuBa = 10, ThuTu } Khi gi tr ca ThuNhat l 0, gi tr ca ThuHai l 1, gi tr ca ThuBa l 10 v gi tr ca ThuTu l 11. Ch : Kiu lit k l mt kiu hnh thc do bt buc phi thc hin php chuyn i tng minh vi cc kiu gi tr nguyn: 17 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ int x = (int) ThuTu.ThuNhat; bi sau bn s c hc v kiu string v kiu mng.

Bi 4: Mng (Array) v kiu chui k t (string)

1. D liu kiu mng a. nh ngha : Mng l mt nhm nhng bin c cng mt kiu d liu. Nhng bin ny c lu tr trong b nhng vng b nh k tip do mng cho php truy xut v thc thi n tng phn t trong mng. b. Cng thc khai bo mt mng

Datatype [] variableName = new Datatype [number of elements];


Trong :

number of elements: l s phn t ca mng Datatype: kiu d liu m mng lu tr variableName: l tn mng.
V d: // mng kiu int int[] iarray = new int[5]; // mng kiu string string[] sarray = new string[6]; V d: cch khai bo khc string[] sarray2 = { "Welcome", "to", "C# Array" }; Khi lp trnh, ty theo iu kin chng trnh m bn c th chn la mt trong hai cch trn. c. Cch truy xut n cc phn t trong mng. 18 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ truy xut n mt phn t trong mt mng chng ta s dng ch s ca phn t trong mng, v d vi mng iarray trn, chng ta s ly c gi tr ca ca phn t th 3 trong mng nh sau: // Truy xut n phn t th 3 trong mng int iValue = iarray[2]; // Gp li nu truy xut n phn t khng nm trong mng int iValue = iarray[5]; truy xut n phn t th 3, chng ta dng ch s 2, nh th, ch s nh du cc phn t trong mng xut pht t 0. Chng ta cng d dng nhn thy khi thc thi, chng trnh bo li dng int iValue = iarray[5], do phn t th 6 khng tn ti trong mng. 2. D liu kiu chui a. nh ngha kiu d liu chui lu gi mt mng nhng k t. b. Khai bo v s dng Kiu d liu chui kh thn thin vi ngi lp trnh trong bt c ngn ng lp trnh no, kiu d liu chui lu gi mt mng nhng k t (charater). khai bo mt chui chng ta s dng t kho string tng t nh cch to mt th hin ca bt c i tng no: string chuoi; chuoi = "Learning C#"; chng ta cng c th gn gi tr cho chui ngay khi khi to nh sau: string chuoi = "Learning C#"; Bn c th tham kho thm v kiu string cc bi vit ny: http://www.itgatevn.com.vn/index.aspx?u=iex&su=d&cid=44&id=20788 http://www.itgatevn.com.vn/index.aspx?u=iex&su=d&cid=44&id=20757 http://www.itgatevn.com.vn/index.aspx?u=iex&su=d&cid=44&id=20784

Bi 5: Cc cu trc lnh trong C#

19

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ 1. Cc cu trc iu khin

C# cung cp hai cu trc iu khin thc hin vic la chn iu kin thc thi chng trnh l cu trc if v switch...case

Cu trc if Cu trc if trong C# c m t nh sau: if (biu thc iu kin) { // cu lnh thc thi nu biu thc iu kin ng } [else { // cu lnh thc thi nu biu thc iu kin sai }]

V d:

if (20 % 4 > 0) { Console.WriteLine("S 20 khng chia ht cho 4"); } else { Console.WriteLine("S 20 chia ht cho s 4"); }

20

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Cu trc switch case

Cu trc swtich.case c cu trc nh sau: // switch ... case switch (Bin iu kin) { case gi tr 1: Cu lnh thc thi break; case gi tr 2: Cu lnh thc thi break; case gi tr 3: Cu lnh thc thi break; default: Cu lnh thc thi break; }

V d:

21

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

int x = 20 % 4; switch (x) { case 1: Console.WriteLine("20 chia cho 4 c s d l 1"); break; case 0: Console.WriteLine("20 chia ht cho 4"); break; default: Console.WriteLine("Khng thuc tt c cc trng hp trn"); break; }

2. Cu trc vng lp trong lp trnh C#

C# cung cp cc cu trc vng lp chng trnh

While Do while For Foreach

Sau y, ti xin gii thiu cng thc v v d s dng cc vn lp trn Vng lp While 22 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Cu trc vng lp while while { // cu lnh } Thc thi cu lnh hoc mt lot nhng cu lnh n khi iu kin khng c tha mn. V d: (biu thc iu kin)

using System; class WhileTest { public static void Main() { int n = 1;

while (n < 6) { Console.WriteLine("Current value of n is {0}", n); n++; } } }

Vng lp do Cu trc vng lp while do 23 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ { // cu lnh } While (biu thc iu kin)

Thc thi cu lnh t nht mt ln n khi iu kin khng c tha mn. V d:

using System; public class TestDoWhile { public static void Main () { int x; int y = 0;

do { x = y++; Console.WriteLine(x); }

while(y < 5); } }

Vng lp for Cu trc vng lp for for ([ phn khi to] ; [biu thc iu kin]; [bc lp]) 24 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ { // thc thi cu lnh } V d:

using System; public class ForLoopTest { public static void Main() { for (int i = 1; i <= 5; i++) Console.WriteLine(i); } }

Vng lp foreach Cu lnh lp foreach kh mi vi nhng ngi hc ngn ng C, t kha ny c s dng trong ngn ng Visual Basic. Cu lnh foreach cho php chng ta lp qua tt c cc mc trong mt mng hay trong mt tp hp. C php s dng lnh lp foreach nh sau:

foreach (<kiu d liu thnh phn> <tn truy cp> in <mng/tp hp> ) { // thc hin thng qua <tn truy cp> tng ng vi // tng mc trong mng hay tp hp }

25

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ D liu kiu tp hp cha c cp ti trong cc bi hc trc nn bn ch cn quan tm n vng lp foreach s dng vi mng. Bn hy xem v d sau hiu cch s dng ca vng lp foreach truy cp n tng phn t ca mng. using System;

public class UsingForeach { public static int Main() { int[] intArray = {1,2,3,4,5,6,7,8,9,10}; foreach( int item in intArray) { Console.Write("{0} ", item); } Console.ReadLine(); return 0; } }

Kt qu:

0 1 2 3 4 5 6 7 8 9 10

3. Cc lnh break, goto v continue

Cu lnh nhy goto:

26

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Lnh nhy goto l mt lnh nhy n gin, cho php chng trnh nhy v iu kin ti mt v tr trong chng trnh thng qua tn nhn. Goto gip chng trnh ca bn c linh hot hn nhng trong nhiu trng hp n s lm mt i cu trc thut ton v gy ri chng trnh.

Cch s dng lnh goto:

To mt nhn goto n nhn

Nhn l mt nh danh theo sau bi du hai chm (:). Thng thng mt lnh goto gn vi mt iu kin no .

V d:

public class UsingGoto { public static void Main() { int i = 0; lap: // nhn Console.WriteLine("i:{0}",i); i++; if ( i < 10 ) goto lap; // nhy v nhn lap Console.ReadLine(); } }

Tng ng vi vng lp for sau:

for (int i = 0; i < 10;i++) 27 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Console.WriteLine("i:{0}", i);

Cu lnh nhy break v continue

Khi ang thc hin cc lnh trong vng lp, c yu cu nh sau: khng thc hin cc lnh cn li na m thot khi vng lp, hay khng thc hin cc cng vic cn li ca vng lp hin ti m nhy qua vng lp tip theo. p ng yu cu trn C# cung cp hai lnh nhy l break v continue thot khi vng lp.

Break khi c s dng s a chng trnh thot khi vng lp v tip tc thc hin cc lnh tip ngay sau vng lp. Continue ngng thc hin cc cng vic cn li ca vng lp hin thi v quay v u vng lp thc hin bc lp tip theo.

V d:

public class UsingBreak_Continue { public static void Main() { for (int i = 0; i < 10; i++) { if (i % 2 == 0) continue; Console.WriteLine("i:{0}", i); if (i==7) break; } Console.ReadLine(); } }

28

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Nu khng c lnh break v continue vng lp s ln lt in ra cc s t 0 n 9 nhng khi gp I chn (i%2==0) th n s continue tc l khng thc hin cc lnh tip theo m quay tr li u vng lp vi gi tr ca I c tng ln 1. Lnh break c thc hin khi (i==7) n s thot khi vng lp ngay lp tc v cng kt thc chng trnh v kt qu l chng trnh trn ch in ra cc s l t 1 n 7 Bi 6: Ton t 1.nh ngha ton t Ton t c k hiu bng mt biu tng dng thc hin mt hnh ng. Cc kiu liu c bn ca C# nh kiu nguyn h tr rt nhiu cc ton t nh ton t gn, ton t ton hc, logic... 2. Cc loi ton t a. Ton t gn n lc ny ton t gn kh quen thuc vi chng ta, hu ht cc chng trnh minh ha t u u s dng php gn. Ton t gn hay php gn lm cho ton hng bn tri thay i gi tr bng vi gi tr ca ton hng bn phi. Ton t gn l ton t hai ngi. y l ton t n gin nht thng dng nht v cng d s dng nht. v d a = b b. Ton t ton hc Ngn ng C# cung cp nm ton t ton hc, bao gm bn ton t u cc php ton c bn. Ton t cui cng l ton t chia nguyn ly phn d. Cc php ton s hc c bn (+,-,*,/) Cc php ton ny khng th thiu trong bt c ngn ng lp trnh no, C# cng khng ngoi l, cc php ton s hc n gin nhng rt cn thit bao gm: php cng (+), php tr (-), php nhn (*), php chia (/) nguyn v khng nguyn %. Khi chia hai s nguyn, th C# s b phn phn s, hay b phn d, tc l nu ta chia 8/3 th s c kt qu l 2 v s b phn d l 2. Tuy nhin, khi chia cho s thc c kiu nh float, double, hay decimal th kt qu chia c tr v l mt s thc. Php ton chia ly d tm phn d ca php chia nguyn, chng ta s dng ton t chia ly d (%). V d, cu lnh sau 8%3 th kt qu tr v l 2 (y l phn d cn li ca php chia nguyn). Tht s php ton chia ly d rt hu dng cho ngi lp trnh . Khi chng ta thc hin mt php chia d n cho mt s khc, nu s ny l bi s ca n th kt qu ca php chia d l 0. 29 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ V d 20 % 5 = 0 v 20 l mt bi s ca 5. iu ny cho php chng ta ng dng trong vng lp, khi mun thc hin mt cng vic no cch khong n ln, ta ch cn kim tra php chia d n, nu kt qu bng 0 th thc hin cng vic. Cch s dng ny p dng trong v d minh ha s dng vng lp for bn trn. V d: Php chia v php chia ly d. using System; class Tester { public static void Main() { int i1, i2; float f1, f2; double d1, d2; decimal dec1, dec2; i1 = 17; i2 = 4; f1 = 17f; f2 = 4f; d1 = 17; d2 = 4; dec1 = 17; dec2 = 4; Console.WriteLine("Integer: \t{0}", i1/i2); Console.WriteLine("Float: \t{0}", f1/f2); Console.WriteLine("Double: \t{0}", d1/d2); Console.WriteLine("Decimal: \t{0}", dec1/dec2); Console.WriteLine("\nModulus: : \t{0}", i1%i2); Console.ReadLine(); } } Kt qu: Integer: 4 float: 4.25 double: 4.25 decimal: 4.25 Modulus: 1 c.Ton t tng v gim Khi s dng cc bin s ta thng c thao tc l cng mt gi tr vo bin, tr i mt gi tr t bin , hay thc hin cc tnh ton thay i gi tr ca bin sau gn gi tr mi va tnh ton cho 30 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ chnh bin . d. Tnh ton v gn tr li Gi s chng ta c mt bin tn Luong lu gi tr lng ca mt ngi, bin Luong ny c gi tr hin thi l 1.500.000, sau tng thm 200.000 ta c th vit nh sau: Luong= Luong +200.000; Trong cu lnh trn php cng c thc hin trc, khi kt qu ca v phi l 1.700.000 v kt qu ny s c gn li cho bin Luong, cui cng Luong c gi tr l 1.700.000. Chng ta c th thc hin vic thay i gi tr ri gn li cho bin vi bt k php ton s hc no: Luong = Luong * 2; Luong = Luong 100.000; Do vic tng hay gim gi tr ca mt bin rt thng xy ra trong khi tnh ton nn C# cung cp cc php ton t gn (self- assignment). Bng sau lit k cc php ton t gn.

Ton t +=

ngha Cng thm gi tr ton hng bn phi vo gi tr ton hng bn tri Ton hng bn tri c tr bt i mt

-=

lng bng gi tr ca ton hng bn phi Ton hng bn tri c nhn vi mt

*=

lng bng gi tr ca ton hng bn phi. Ton hng bn tri c chia vi mt

/=

lng bng gi tr ca ton hng bn phi. Ton hng bn tri c chia ly d vi

31

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ %= mt lng bng gi tr ca ton hng bn phi.

Bng m t cc php ton t gn.


Da trn cc php ton t gn trong bng ta c th thay th cc lnh tng gim lng nh sau: Luong += 200.000; Luong *= 2; Luong -= 100.000; Kt qu ca lnh th nht l gi tr ca Luong s tng thm 200.000, lnh th hai s lm cho gi tr Luong nhn i tc l tng gp 2 ln, v lnh cui cng s tr bt 100.000 ca Luong. Do vic tng hay gim 1 rt ph bin trong lp trnh nn C# cung cp hai ton t c bit l tng mt (++) hay gim mt (--). Khi mun tng i mt gi tr ca bin m trong vng lp ta c th vit nh sau: bienDem++; e. Ton t tng gim tin t v tng gim hu t

Gi s mun kt hp cc php ton nh gia tng gi tr ca mt bin v gn gi tr ca bin cho bin th hai, ta vit nh sau: var1 = var2++; Cu hi c t ra l gn gi tr trc khi cng hay gn gi tr sau khi cng. Hay ni cch khc gi tr ban u ca bin var2 l 10, sau khi thc hin ta mun gi tr ca var1 l 10, var2 l 11, hay var1 l 11, var2 cng 11? gii quyt yu cu trn C# cung cp th t thc hin php ton tng/gim vi php ton gn, th t ny c gi l tin t (prefix) hay hu t (postfix). Do ta c th v it: var1 = var2++; // Hu t 32 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Khi lnh ny c thc hin th php gn s c thc hin trc tin, sau mi n php ton tng. Kt qu l var1 = 10 v var2 = 11. Cn i vi trng hp tin t: var1 = ++var2; Khi php tng s c thc hin trc tc l gi tr ca bin var2 s l 11 v cui cng php gn c thc hin. Kt qu c hai bin var1 v var2 iu c gi tr l 11. Minh ho s dng ton t tng trc v tng sau khi gn. using System; class Tester { static int Main() { int valueOne = 10; int valueTwo; valueTwo = valueOne++; Console.WriteLine("Thuc hien tang sau: {0}, {1}", valueOne, valueTwo); valueOne = 20; valueTwo = ++valueOne; Console.WriteLine("Thuc hien tang truoc: {0}, {1}", valueOne, valueTwo); Console.ReadLine(); return 0; } } Kt qu: Thuc hien tang sau: 11, 10 Thuc hien tang truoc: 21, 21 f. Ton t quan h Nhng ton t quan h c dng so snh gia hai gi tr, v sau tr v kt qu l mt gi tr logic kiu bool (true hay false). V d ton t so snh ln hn (>) tr v gi tr l true nu gi tr bn tri ca ton t ln hn gi tr bn phi ca ton t. Do vy 5 > 2 tr v mt gi tr l true, trong khi 2 > 5 tr v gi tr false. Cc ton t quan h trong ngn ng C# c trnh by bng 3.4 bn di. Cc ton t trong bng c minh ha vi hai bin l value1 v value2, trong value1 c gi tr l 100 v value2 c gi tr l 50.

Tn ton t So snh bng

K hiu ==

Biu thc so snh Value1==100 Value1==50

Kt qu True False http://www.itgatevn.com.vn

33

Su tm v edit bi Oki@kimur@ Khng bng != Value2 !=100 Value2 !=50 Ln hn > Value1> value2 Value2> value1 Ln hn hoc bng Nh hn >= Value2 >= 50 False True True False True

<

Value1<value2 Value2<value1

False True False

Nh hn hoc bng

<=

Value1<=value2

Cc ton t so snh (gi s value1 = 100, v value2 = 50).


Nh trong bng 3.4 trn ta lu ton t so snh bng (==), ton t ny c k hiu bi hai du bng (=) lin nhau v cng trn mt hng , khng c bt k khong trng no xut hin gia chng. Trnh bin dch C# xem hai du ny nh mt ton t. g. Ton t logic Trong cu lnh if m chng ta tm hiu trong phn trc, th khi iu kin l true th biu thc bn trong if mi c thc hin. i khi chng ta mun kt hp nhiu iu kin vi nhau nh: bt buc c hai hay nhiu iu kin phi ng hoc ch cn mt trong cc iu kin ng l hoc khng c iu kin no ng...C# cung cp mt tp hp cc ton t logic phc v cho ngi lp trnh. Bng sau lit k ba php ton logic, bng ny cng s dng hai bin minh ha l x, v y trong x c gi tr l 5 cn y c gi tr l 7 Tn ton t And K hiu && Biu thc logic Gi tr Logic C hai iu kin phi ng Ch cn mt iu kin ng Biu thc trong ngoc http://www.itgatevn.com.vn

(x==3)&&(y==7) False

Or

||

(x==3)||(y==7)

True

Not 34

! (x==3)

True

Su tm v edit bi Oki@kimur@ phi sai

h.Ton t ba ngi Hu ht cc ton t i hi c mt ton hng nh ton t (++, --) hay hai ton hng nh (+,,*,/,...). Tuy nhin, C# cn cung cp thm mt ton t c ba ton hng (?:). Ton t ny c c php s dng nh sau: <Biu thc iu kin > ? <Biu thc th 1> : <Biu thc th 2> Ton t ny s xc nh gi tr ca mt biu thc iu kin, v biu thc iu kin ny phi tr v mt gi tr kiu bool. Khi iu kin ng th <biu thc th 1> s c thc hin, cn ngc li iu kin sai th <biu thc th 2> s c thc hin. C th din gii theo ngn ng t nhin th ton t ny c ngha : Nu iu kin ng th lm cng vic th nht, cn ngc li iu kin sai th lm cng vic th hai. Cch s dng ton t ba ngi ny c minh ha trong v d sau. S dng ton t bao ngi. using System; class Tester { public static int Main() { int value1; int value2; int maxValue; value1 = 10; value2 = 20; maxValue = value1 > value2 ? value1 : value2; Console.WriteLine("Gia tri thu nhat {0}, gia tri thu hai {1}, gia tri lon nhat {2}",value1, value2, maxValue); Console.ReadLine(); return 0; } } Trong v d minh ha trn ton t ba ngi c s dng kim tra xem gi tr ca value1 c ln hn gi tr ca value2, nu ng th tr v gi tr ca value1, tc l gn gi tr value1 cho bin maxValue, cn ngc li th gn gi tr value2 cho bin maxValue.

35

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

Bi 7: X l ngoi l, cc lnh throw, catch, finally. 1. nh ngha ngoi l v trnh x l ngoi l

Ngoi l: L mt i tng ng gi nhng thng tin v s c ca mt chng trnh khng bnh thng.

Mt trnh x l ngoi l: L mt khi lnh chng trnh c thit k x l cc ngoi l m chng trnh pht sinh. X l ngoi l c thc thi trong trong cu lnh catch. Mt cch l tng th nu mt ngoi l c bt v c x l, th chng trnh c th sa cha c vn v tip tc thc hin hot ng. Thm ch nu chng trnh khng tip tc, bng vic bt gi ngoi l chng ta c c hi in ra nhng thng ip c ngha v kt thc chng trnh mt cch r rng. Nu on chng trnh ca chng ta thc hin m khng quan tm n bt c ngoi l no m chng ta c th gp (nh khi gii phng ti nguyn m chng trnh c cp pht), chng ta c th t on m ny trong khi finally, khi n s chc chn s c thc hin thm ch ngay c khi c mt ngoi l xut hin.

Pht sinh v bt gi ngoi l

Trong ngn ng C#, chng ta ch c th pht sinh (throw) nhng i tng cc kiu d liu l System.Exception, hay nhng i tng c dn xut t kiu d liu ny. Namespace System ca CLR cha mt s cc kiu d liu x l ngoi l m chng ta c th s dng trong chng trnh. Nhng kiu d liu ngoi l ny bao gm ArgumentNullException, InValidCastException, v OverflowException, cng nh nhiu lp khc na.

2.

Lnh Throw

C php: throw new System.Exception(); Khi pht sinh ngoi l th ngay tc khc s lm ngng vic thc thi trong khi CLR s tm 36 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ kim mt trnh x l ngoi l. Nu mt trnh x l ngoi l khng c tm thy trong phng thc hin thi, th CLR tip tc tm trong phng thc gi cho n khi no tm thy. Nu CLR tr v lp Main() m khng tm thy bt c trnh x l ngoi l no, th n s kt thc chng trnh.

V d:

using System; using System.Collections.Generic; using System.Text; namespace Programming_CSharp { public class Test { public static void Main() { Console.WriteLine("hm Main...."); Test t = new Test(); t.Func1(); Console.WriteLine("Kt thc hm Main..."); } public void Func1() { Console.WriteLine("Bt u hm Func1..."); Func2(); Console.WriteLine("Kt thc hm Func1..."); } public void Func2() { Console.WriteLine("Bt u hm Func2..."); throw new System.Exception(); Console.WriteLine("Kt thc hm Func2..."); } } }

Gii thch v d trn nh sau: Hm Main() gi hm Func1(). Hm Func1() thc hin lnh in ra mn hnh dng bt u hm Func1 sau n gi ti hm Func2(). Hm Func2() li in ra dng bt u hm Func2 sau n s pht sinh ra mt ngoi l dng cu lnh throw new 37 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ System.Exception(). Ti y chng trnh b ngng thc thi, CLR s tm kim trnh x l ngoi l cho ngoi l hm Func2() pht sinh. CLR s ln lt tm kim trong stack , hm Func1() nhng khng c trnh x l ngoi l no, n s tip tc tm n hm main nhng hm ny cng khng c nn CLR s gi trnh x l ngoi l mc nh, n s xut ra mt thng ip li nh cc bn thy khi thc thi chng trnh.

3.

Lnh Try Catch

Trong C#, mt trnh x l ngoi l hay mt on chng trnh x l cc ngoi l c gi l mt khi catch v c to ra vi t kha catch.

Chng ta s vit li v d trn nhng t throw vo trong khi try v mt khi catch s dng x l ngoi l do lnh throw pht sinh. Khi catch s a ra thng bo l c mt li c x l.

using System; using System.Collections.Generic; using System.Text; namespace Programming_CSharp { public class Test { public static void Main() { Console.WriteLine("hm Main...."); Test t = new Test(); t.Func1(); Console.WriteLine("Kt thc hm Main..."); Console.ReadLine(); } public void Func1() { Console.WriteLine("Bt u hm Func1..."); Func2(); Console.WriteLine("Kt thc hm Func1..."); } public void Func2() { 38 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Console.WriteLine("Bt u hm Func2..."); try { Console.WriteLine("Bt u Khi try"); throw new System.Exception(); Console.WriteLine("Kt thc khi try"); } catch { Console.WriteLine("Ngoi l c x l"); } Console.WriteLine("Kt thc hm Func2..."); } } } Tng t nh v d ti va trnh by, cho n khi chng trnh thc hin hm Func2() khi lnh throw pht sinh ra ngoi l, chng trnh s b ngng thc hin v CLR s tm phn x l ngoi l trong stack, u tin n s gi n hm Func1() ti y hm Func2() c gi v n s tm thy phn x l ngoi l trong khi catch , n s in ra dng Ngoi l c x l. cng l l do m chng trnh s khng bao gi in ra dng Kt thc khi try. 4. Lnh Finally

Trong mt s tnh hung chng ta cn phi thc hin bt c khi no mt ngoi l c pht sinh ra, v d nh vic ng mt tp tin. lm vic ny chng ta c th t cu lnh trong c hai khi try v catch. Tuy nhin c mt cch gii quyt tt hn, l s dng cu lnh Finnally. Cc hnh ng t trong khi finnally s lun c thc hin m khng cn quan tm ti vic c hay khng mt ngoi l pht sinh trong chng trnh.

Chng ta cng xt v d sau:

using System; namespace Programming_CSharp { public class Test { public static void Main() { Test t = new Test(); 39 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ t.TestFunc(); Console.ReadLine(); } // chia hai s v x l ngoi l nu c public void TestFunc() { try { Console.WriteLine("m file"); double a = 5; double b = 0; Console.WriteLine("{0} /{1} = {2}", a, b, DoDivide(a,b)); Console.WriteLine("dng ny c th xut hin hoc khng"); } catch (System.DivideByZeroException) { Console.WriteLine("li chia cho 0!"); } catch { Console.WriteLine("khng c ngoi l"); } finally { Console.WriteLine("ng tp."); } } // thc hin chia nu hp l public double DoDivide(double a, double b) { if ( b == 0) { throw new System.DivideByZeroException(); } if ( a == 0) { throw new System.ArithmeticException(); } return a/b; } } } u tin hy gn a= 5 v b=0 chy chng trnh Bn s thy lnh Console.WriteLine("dng ny c th xut hin hoc khng"); 40 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ S khng c thc hin do xut hin mt ngoi l l li chia cho 0 v chng trnh s tm ti phn x l ngoi l ny m b qua phn lnh tip theo.

Sau bn thay i gi tr b=12 v chy chng trnh th lnh Console.WriteLine("dng ny c th xut hin hoc khng"); c thc hin. Tuy nhin c 2 trng hp bn thy thc hin lnh l v lnh ny c t trong khi Finally. Console.WriteLine("ng tp.");

Nm c cch x l ngoi l qua vic s dng cc cu lnh throw, catch v finally s gip bn lp trnh c hiu qu hn.

Bi 8:Lp v i tng
1. Lp v i tng

a. Lp (class) Mt lp l mt khi nim m t cho nhng thc th c chung tnh cht v hnh vi. Lp nh ngha nhng thuc tnh v hnh vi c dng cho nhng i tng ca lp . Do c th ni lp l mt khun mu cho cc i tng. Cng thc to mt class AccessModifier class className { // thn class } V d ti nh ngha mt class l color, class ny c truy cp public public class Color { // Ni dung class } b. 41 i tng http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ i tng l mt i din, hay c th ni l mt sn phm ca mt class. Tt c cc i tng u c chung nhng thuc tnh v hnh vi m class nh ngha. Cch to i tng ging nh cch to mt bin c kiu d liu l Class. V d ti mun khai bo mt i tng c l th hin ca class color ni trn. Ti lm nh sau: Color c = new Color(); Sau t i tng c ny ti s truy cp n cc thnh phn ca class thng qua ton t . (M ti gii thiu bi hc s 2). Tuy nhin vic truy cp cc thnh phn ca class cn ty thuc vo thnh phn l instance hay static. Bn s c tm hiu khi nim ny phn tip theo ca bi hc. c. u im khi s dng lp v i tng trong lp trnh

C mt s nhng u im ca vic s dng Class v i tng trong pht trin phn mm. Nhng u im ni bt nht c lit k nh sau: Duy tr code bng vic m hnh ha ng gi nhng s phc tp trong m lnh t ngi dng Kh nng s dng li Cung cp n k tha thc thi nhiu phng thc. Cc bn s hiu hn v iu ny cc bi hc sau ca chng ti v inheritance (s tha k) hay polymorphism ( Tnh a hnh ). 2. Khi nim thnh vin th hin (instance) v thnh vin tnh(static) Trong mt lp , cc thnh vin c th l instance (thnh vin th hin) hoc static (thnh vin tnh). Mt thnh vin instance c ngha l thnh vin lin quan n th hin ca mt kiu d liu. Thnh vin static c xem nh mt phn ca lp. Chng ta truy cp n thnh vin tnh ca mt lp thng qua tn lp c khai bo. Cn cc thnh vin instance th phi thng qua th hin ca lp. Gi s chng ta c mt lp l class A v c 2 th hin l t1, t2 v mt phng thc tnh l a(). truy cp phng thc ny ta vit A.a(). Ch khng th vit t1. a() hoc t2.a() v trong C# khng cho php truy cp n phng thc cng nh cc bin thnh vin tnh thng qua mt th hin. Mt s ngn ng th c s phn chia gia phng thc ca lp v cc phng thc khc (ton cc) tn ti bn ngoi khng ph thuc bt c mt lp no. Tuy nhin, iu ny khng cho php trong C#, ngn ng C# khng cho php to cc phng thc bn ngoi ca lp, nhng ta c th to c cc phng thc ging nh vy bng cch to cc phng thc tnh bn trong mt lp. Phng thc tnh t nhiu ging phng thc ton cc bi ta c th truy cp n n khng phi thng qua bt c mt th hin no ca lp cha n. Tuy nhin phng thc tnh s hot ng tt hn phng 42 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ thc ton cc v n lun c t trong phm vi mt lp do chng ta s trnh c tnh trng ln xn do b trng tn gia cc phng thc t trong namespace.

3.

Cc thnh phn ca lp a. Fields

Field l mt phn t dng th hin cc bin trong lp cc bin hoc cc th hin ca mt lp d: class Color { internal ushort redPart; internal ushort bluePart; internal ushort greenPart; public Color(ushort red, ushort blue, ushort green) { redPart = red; bluePart = blue; greenPart = green; } } Lp color cha cc instance fields nh l redPart, bluePart, v greenPart. Fields c th l static nh v d di y:

Class Color { public static public static public static public static ... }

Color Color Color Color

Red = new Color(0xFF, 0, 0); Blue = new Color(0, 0xFF, 0); Green = new Color(0, 0, 0xFF); White = new Color(0xFF, 0xFF, 0xFF);

Cc phn t Red, Blue, Green, White u l cc phn t static. b. Properties

Property (thuc tnh, c tnh) l mt phn t dng truy cp n c im ca mt i tng hoc mt class (lp). V d nh l di mt chui, kch c ca font ch, rng ca mt ca s, tn ca mt customer Property l phn m rng ca fields. C 2 u c gi tn vi cc kiu kt hp, v cch truy cp n fields v properties l nh nhau. Tuy nhin khc vi fields, 43 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ properties khng ch r ni lu tr n. Thay vo , properties c cch truy nhp l dng cu lnh thi hnh vic c v ghi gi tr. Property c nh ngha bng 2 phn. Phn th nht ging nh cch nh ngha Fields. Phn th 2 cha phn t truy cp get v set. Cc bn hy xem v d di y :

public class Button { private string caption; public string Caption { get { return caption; } set { caption = value; Repaint(); } } } c. Methods Bn s c hc v methods bi sau

Bi 9: Methods (Phng thc) v cc vn lin quan

1. Khi nim v method Method (Ting vit gi l hm hoc phng thc) l mt thnh phn ca class dng thc thi mt cng vic no ca mt i tng hoc mt class. Mt method s cha mt danh sch cc i s(hoc c th khng c i s), mt gi tr tr v (tr void method). Method c th l static (tnh) hoc non- static (hay l instance method- phng thc th hin). y l v d v method:

public class Stack { public static Stack Clone(Stack s) {...} public static Stack Flip(Stack s) {...} public object Pop() {...} public void Push(object o) {...} public override string ToString() {...} ... 44 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ } class Test { static void Main() { Stack s = new Stack(); for (int i = 1; i < 10; i++) s.Push(i); Stack flipped = Stack.Flip(s); Stack cloned = Stack.Clone(s); Console.WriteLine("Original stack: " + s.ToString()); Console.WriteLine("Flipped stack: " + flipped.ToString()); Console.WriteLine("Cloned stack: " + cloned.ToString()); } } Class Stack c 2 phng thc tnh (static method) l Clone v Flip v cc phng thc th hin l Push, Push, Pop, and ToString. Mt ln na bn thy cc phng thc tnh c gi trc tip t tn ca lp cn phng thc th hin phi c gi qua th hin ca lp. Phng thc c th c overloaded . C ngha l nhiu methods c tn ging nhau. Bn s c hc v overloading methods trong bi ti. 2. Truyn tham s cho method Vic truyn tham s vo cho phng thc ch c thc hin i vi cc kiu d liu gi tr. Vy cch thc truyn tham s s c thc hin nh th no? Trong C# cc tham s c truyn vo hm thng qua 2 cch l truyn theo gi tr (truyn tham tr) v truyn theo a ch (truyn tham chiu). Chng ta s ln lt tm hiu hai cc truyn ny. a. Truyn tham tr Khi mt i tng c kiu gi tr c truyn gi tr vo cho mt phng thc th c mt bn sao chp i tng c to ra bn trong phng thc. Khi phng thc thc hin xong th i tng sao chp ny s c hy. Di y l v d v cch truyn tham tr:

using System; public class Time { public void DisplayCurrentTime() { Console.WriteLine("{0}/{1}/{2}/ {3}:{4}:{5}", Date, Month, Year, Hour, Minute, Second); } public int GetHour() 45 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ { return Hour; } public void GetTime(int h, int m, int s) { h = Hour; m = Minute; s = Second; } public Time( System.DateTime dt) { Year = dt.Year; Month = dt.Month; Date = dt.Day; Hour = dt.Hour; Minute = dt.Minute; Second = dt.Second; } private int Year; private int Month; private int Date; private int Hour; private int Minute; private int Second; } public class Tester { static void Main() { System.DateTime currentTime = System.DateTime.Now; Time t = new Time( currentTime); t.DisplayCurrentTime(); int theHour = 0; int theMinute = 0; int theSecond = 0; t.GetTime( theHour, theMinute, theSecond); System.Console.WriteLine("Current time: {0}:{1}:{2}", theHour, theMinute, theSecond); } }

Kt qu: 8/6/2002 14:15:20 Current time: 0:0:0 46 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

Nh cc bn thy kt qu in ra Current time: 0:0:0 tc l cc bin theHour, theMinute, theSecond vn gi nguyn gi tr ca n sau hm GetTime. b. Truyn tham chiu

Nh ti ni trn, mi phng thc s c mt gi tr duy nht c tr v, mc d gi tr ny c th l mt tp hp cc gi tr. i khi chng ta mun phng thc tr v nhiu hn mt gi tr. Cch thc hin l to ra cch tham s di hnh thc tham chiu. Khi bn truyn tham chiu, trong phng thc bn s x l v gn cc gi tr mi cho cc tham chiu ny v kt qu l sau khi phng thc thc hin xong ta dng cc tham s truyn vo nh l cc kt qu tr v. lm vic ny bn phi thm t kha ref (vit tt ca reference) vo trc cc tham s trong phn khai bo phng v li gi phng thc. V d cc bin theHour, theMinute, theSecond trong v d trn sau khi c x l trong GetTime s c gi tr nh chng va c gn, chng ta s phi lm nh sau: u tin thm khai bo ref vo trc cc tham s trong phng thc GetTime(): public void GetTime(ref int h, ref int m, ref int s) { h = Hour; m = Minute; s = Second; } Tip theo l s gi phng thc GetTime di dng truyn tham chiu nh sau:

t.GetTime(ref theHour, ref theMinute, ref theSecond);

Tm li c ch truyn tham s dng tham chiu s thc hin trn chnh i tng c a vo. Cn c ch truyn tham s gi tr th s to ra cc bn sao cc i tng c truyn vo, do mi thay i bn trong phng thc khng lm nh hng n cc i tng c truyn vo di dng gi tr.

Bi 10: Overloading Method


Method Overloading xut hin khi trong mt class c t hai hm c cng tn. C hai kiu Method Overloading: 47 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

Function Overloading da trn kiu gi tr tham s truyn vo. Function Overloading da trn s lng tham s truyn vo.

V d

class Library { // Function Overloading public void insertbooks(int id) { // } public void insertbooks(int id, int type) { // } public void insertbooks(string id, int type) { // } }

Ba hm insertbooks trn l mt v d v function overloading trong lp trnh C#. Trong khi hm th nht v th 2 l overloading theo s lng tham s, v hm th 3 vi hm th 2 l overloading theo kiu tham s truyn vo. Bi 11:constructor & Destructor Ni dung bi hc

Khi nim constructor v destructor Instance constructor v static constructor


1. Khi nim v constructor v destructor a. Constructor Constructors (Tm dch l phng thc khi to) l nhng hm c bit cho php thc thi, iu khin chng trnh ngay khi khi to i tng. Trong C#, Constructors c tn ging nh tn ca Class v khng c gi tr tr v. V d: class Library 48 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ { private int ibooktypes; //Constructor public Library() { ibooktypes = 7; } public Library(int value) { ibooktypes = value; } }

b.

Destructor

Destructor (tm dch l phng thc hy) l mt hm dng hy i mt th hin ca mt class. Destructor khng c i s, khng c t ch thuc tnh truy nhp, v khng c gi tng minh. Destructor ca mt th hin s c gi t ng khi mt th hin kt thc vng i ca n thng qua b thu dn rc t ng (Garbage Collection). Destructor cng c tn trng vi tn class. khai bo mt destructor chng ta t du ~ vo trc destructor V d class Library { private int ibooktypes; //Constructor public Library() { ibooktypes = 7; } public Library(int value) { ibooktypes = value; } //Destructor ~ Library() { //thc thi cu lnh } } ~Library() l destructor ca lp Library 49 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

2. Instance constructor v Static constructor Nh bi hc trc ti gii thiu, Cc thnh phn trong class c th l instance v static. Constructors cng l mt thnh phn ca class, vy Instance constructors v Static constructors c g khc nhau? Chng ta s cng tm hiu. a. Instance constructor Mt instance constructor( tm dch l mt b khi dng th hin) s khi to mt s gi tr khi mt th hin ca mt lp c to ra.

V d: class Point { public double x, y; public Point() { this.x = 0; this.y = 0; } public Point(double x, double y) { this.x = x; this.y = y; } public static double Distance(Point a, Point b) { double xdiff = a.x b.x; double ydiff = a.y b.y; return Math.Sqrt(xdiff * xdiff + ydiff * ydiff); } public override string ToString() { return string.Format("({0}, {1})", x, y); } } class Test { static void Main() { Point a = new Point(); Point b = new Point(3, 4); double d = Point.Distance(a, b); 50 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Console.WriteLine("Distance from {0} to {1} is {2}", a, b, d); } } Trong lp Point c 2 instance constructors. Mt khng c i s truyn vo v 2 constructor cn li c 2 tham s kiu double. Nu class khng c instance constructor no th constructor khng c i s s c gi t ng. b. Static constructor

Nu mt lp khai bo mt phng thc khi to tnh (static constructor), th c m bo rng phng thc ny s c thc hin trc bt c th hin no ca lp c to ra. Static Constructor hu dng khi chng ta cn ci t mt s cng vic m khng th thc hin c thng qua chc nng khi dng v cng vic ci t ny ch c thc duy nht mt ln. Static constructor khng c thuc tnh truy cp, khng c i s v khng c gi tng minh m s c gi t ng. V d: sing System; using Personnel.Data; class Employee { private static DataSet ds; static Employee() { ds = new DataSet(...); } public string Name; public decimal Salary; ... } Khi i tng ds s c to ra khi trc khi ta to mt th hin Bi 12: Inheritance - S k tha C 2 kiu k tha trong lp trnh hng i tng l n k tha (k tha t nhiu lp) v a k tha (k tha t nhiu lp). C# ch cung cp m hnh n k tha. V d v k tha trong C#.

lp emplyee.

/* V d v tha k trong l trnh C# */ using System; using System.Collections.Generic; using System.Text; namespace __OOP_Inheritance 51 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ { class Program { static void Main(string[] args) { Dog objDog = new Dog(4); objDog.displayProperties(); Chicken objChicken = new Chicken(2); objChicken.displayProperties(); Console.Read(); } } class Animal { protected int ifoots; protected string sName; protected void setFoot(int ival) { ifoots = ival; } protected void setName(string sVal) { sName = sVal; } public void displayProperties() { Console.WriteLine(sName + " have " + ifoots.ToString()+ " foots"); } } class Dog : Animal { public Dog(int ival) { setName("Dog"); ifoots = ival; } } class Chicken : Animal { public Chicken(int ival) { setName("Chicken"); setFoot(ival); } } 52 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ }

Kt qu khi thc thi chng trnh

v d trn, Dog v Chicken l hai lp k tha t lp Animal, do cc thuc tnh nh s chn, ifoots v tn sName ng nhin xut hin trong hai lp ny v cho php s dng. Tng t, cc hm nh setName(), setFoot(), displayProperties() ti lp Animal cng c k tha xung hai lp Dog v Chicken. Do ta c th gi nhng hm ny, v kt qu hin th khi gi hm displayProperties() theo i tng objDog v objChicken khc nhau nh hnh trn. Mt lu trong tha k y l Overriding method. Nu mt hm c nh ngha trong lp con c cng tn, kiu vi hm trong lp cha, khi y hm trong lp con s overrides (lm n) hm trong lp cha. c gi l overriding. V d v Overriding:

/* V d v tha k,overrding trong lp trnh C# */ using System; using System.Collections.Generic; using System.Text; namespace __OOP_Inheritance { class Program { static void Main(string[] args) { Dog objDog = new Dog(4); objDog.displayProperties(); Chicken objChicken = new Chicken(2); objChicken.displayProperties(); Tiger objTiger = new Tiger(4); objTiger.displayProperties(); Console.Read(); } } class Animal { 53

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ protected int ifoots; protected string sName; protected void setFoot(int ival) { ifoots = ival; } protected void setName(string sVal) { sName = sVal; } public virtual void displayProperties() // ch hm ny { Console.WriteLine(sName + " has " + ifoots.ToString()+ " foots"); } } class Dog : Animal { public Dog(int ival) { setName("Dog"); ifoots = ival; } } class Chicken : Animal { public Chicken(int ival) { setName("Chicken"); setFoot(ival); } public void displayProperties() { base.displayProperties(); Console.WriteLine(sName + " have " + ifoots.ToString() + " foots (from Chicken class)"); } } class Tiger : Animal { public Tiger(int ival) { setFoot(ival); } public override void displayProperties() // ch hm ny 54 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ { Console.WriteLine("Tiger has " + ifoots.ToString()+ " foots"); } } }

Kt qu thc hin chng trnh

Hm displayProperties() trong lp Tiger overrides hm displayProperties() trong lp Animal.

Bi 13: Polymorphism
V d v polymorphism:

using System; using System.Collections.Generic; using System.Text; namespace __OOP_polymorphism { class Program { static void Main(string[] args) { Child objchild = new Child(); Console.WriteLine("Result is " + objchild.methodA().ToString()); Console.Read(); } } class Parent { public int methodA() { return methodB() * methodC(); } public virtual int methodB() 55 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ { return 1; } public int methodC() { return 2; } } class Child : Parent { public override int methodB() { return 3; } } }

Kt qu chy trng trnh

Nh bnh thng ca m hnh k tha, kt qu tr v khi gi hm methodA() t i tng ca lp Child phi l Result is 2. Nhng trong kt qu trn, kt qu l Result is 6. Kt qu ny do hm methodB() ti lp Child override hm methodB() ti lp Parent. Vy ta c th khi qut Polymorphism nh sau:

Polymorphism khng ch n gin l overriding, m n l overrding thng minh. Khc bit gi Overriding v Polymorphism l trong Polymorphism, s quyt nh gi hm c thc hin khi chng trnh chy.

Bi 14: Abstract Class v Sealed class


Abstract Class l lp dng nh ngha nhng thuc tnh v hnh vi chung ca nhng lp khc. Mt Abstract class c dng nh mt lp cha ca cc lp khc. T kha abstract c dng nh ngha mt abstract class. Nhng lp c nh ngha bng cch dng t kha abstract th khng cho php khi to i tng ca lp y.

56

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ abstract class Shape { public abstract float calculateArea(); public void displaySomething() { Console.WriteLine("Something is displayed"); } } class Circle:Shape { float radius; public override float calculateArea() { return radius * 22 / 7; } } Khi thc thi chng trnh, bn khng th to i tng cho lp Shape, v n l abstract class.

Bi 15: Interface
1. nh ngha interface (giao din)

Giao din l rng buc, giao c m bo cho cc lp hay cc cu trc s thc hin mt iu g . Khi mt lp thc thi mt giao din, th lp ny bo cho cc thnh phn client bit rng lp ny c h tr cc phng thc, thuc tnh, s kin v cc ch mc khai bo trong giao din. Mt giao din th ging nh mt lp ch cha cc phng thc tru tng. Mt lp tru tng c dng lm lp c s cho mt h cc lp dn xut t n. Trong khi giao din l s trn ln vi cc cy k tha khc.

Tuy nhin bn phi hiu l giao din khng phi l lp.

Sau y ti s gii thiu vi bn cch nh ngha v thc thi mt giao din

C php nh ngha mt giao din nh sau:

[thuc tnh] [phm vi truy cp] interface <tn giao din> [: danh sch c s] 57 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ { <phn thn giao din> }

Phn thuc tnh chng ta cha cp ti cc bn hy lu n phn phm vi truy cp bao gm public, private, protected, internal, v protected internal c ni n. Theo sau t kha interface l tn ca giao din. Thng thng tn ca giao din c bt u vi t I hoa (iu ny khng bt buc nhng vic t tn nh vy rt r rng v d hiu, trnh nhm ln vi cc thnh phn khc). Danh sch c s l danh sch cc giao din m giao din ny m rng, phn ny s c trnh by trong phn thc thi nhiu giao din. Phn thn ca giao din chnh l phn thc thi giao din.

2.

Thc thi giao din

Gi s chng ta mun to mt giao din nhm m t nhng phng thc v thuc tnh ca mt lp cn thit lu tr v truy cp t mt c s d liu hay cc thnh phn lu tr d liu khc nh l mt tp tin. Chng ta quyt nh gi giao din ny l IStorage. Trong giao din ny chng ta xc nhn hai phng thc: Read() v Write(), khai bo ny s c xut hin trong phn thn ca giao din nh sau:

interface IStorable { void Read(); void Write(object); }

Mc ch ca mt giao din l nh ngha nhng kh nng m chng ta mun c trong mt lp. V d, chng ta c th to mt lp tn l Document, lp ny lu tr cc d liu trong c s d liu, do chng ta quyt nh lp ny ny thc thi giao din IStorable. lm c iu 58 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ ny, chng ta s dng c php ging nh vic to mt lp mi Document c tha k t IStorable bng dng du hai chm (:) v theo sau l tn giao din:

public class Document : IStorable { public void Read() { //... } public void Write() { //... } }

Di y l code minh ha vic thc thi giao din:

using System; // khai bo giao din interface IStorable { // giao din khng khai bo b sung truy cp // phng thc l public v khng thc thi void Read(); void Write(object obj); int Status { get; set; } 59 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ } // to mt lp thc thi giao din IStorable public class Document : IStorable { public Document( string s) { Console.WriteLine("Creating document with: {0}", s); } // thc thi phng thc Read() public void Read() { Console.WriteLine("Implement the Read Method for IStorable"); } // thc thi phng thc Write public void Write( object o) { Console.WriteLine("Impleting the Write Method for IStorable"); } // thc thi thuc tnh public int Status { get { return status; } set { status = value; } } // lu tr gi tr thuc tnh 60 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ private int status = 0; } public class Tester { static void Main() { // truy cp phng thc trong i tng Document Document doc = new Document("Test Document"); doc.Status = -1; doc.Read(); Console.WriteLine("Document Status: {0}", doc.Status); // gn cho mt giao din v s dng giao din IStorable isDoc = (IStorable) doc; isDoc.Status = 0; isDoc.Read(); Console.WriteLine("IStorable Status: {0}", isDoc.Status); Console.ReadLine();

} }

3.

Thc thi nhiu giao din

Trong ngn ng C# cho php chng ta thc thi nhiu hn mt giao din. V d, nu lp Document c th c lu tr v d liu cng c nn. Chng ta c th chn thc thi c hai giao din IStorable v ICompressible. Nh vy chng ta phi thay i phn khai bo trong danh sch c s ch ra rng c hai giao din iu c thc thi, s dng du phy (,) phn cch gia hai giao din:

public class Document : IStorable, ICompressible

61

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ Khi lp Document phi thc hin y cc method c xc nhn trong ICompressible.

4.

M rng giao din

C# cung cp chc nng cho chng ta m rng mt giao din c bng cch thm cc phng thc v cc thnh vin hay b sung cch lm vic cho cc thnh vin. V d, chng ta c th m rng giao din ICompressible vi mt giao din mi l ILoggedCompressible. Giao din mi ny m rng giao din c bng cch thm phng thc ghi log cc d liu lu:

interface ILoggedCompressible : ICompressible { void LogSavedBytes(); }

5. Kt hp giao din

Mt cch tng t, chng ta c th to giao din mi bng cch kt hp cc giao din c v ta c th thm cc phng thc hay cc thuc tnh cho giao din mi. V d, chng ta quyt nh to mt giao din IStorableCompressible. Giao din mi ny s kt hp nhng phng thc ca c hai giao din v cng thm vo mt phng thc mi lu tr kch thc nguyn thu ca cc d liu trc khi nn:

interface IStorableCompressible : IStoreable, ILoggedCompressible { void LogOriginalSize(); }

Cc bn c lm quen vi mt khi nim na trong C# l giao din (interface). Cch nh ngha v thc thi mt interface, cc thc thi nhiu interface, m rng v kt hp cc interface.

62

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

Bi 16: Kiu Struct


Struct (kiu cu trc) l kiu d liu n gin do ngi dng nh ngha, kch thc nh c th dng thay th cho lp. Struct cng tng t nh lp, cng cha cc phng thc (methods), nhng thuc tnh(properties), cc trng(fields), cc ton t(operators), cc kiu d liu lng bn trong v b ch mc (indexer). C mt s s khc nhau quan trng gia nhng lp v cu trc. V d, cu trc th khng h tr k tha (Inheritance)v b hy (Destructor)ging nh kiu lp. Mt iu quan trng nht l trong khi lp l kiu d liu tham chiu, th cu trc l kiu d lu gi tr . Do cu trc thng dng th hin cc i tng khng i hi mt ng ngha tham chiu, hay mt lp nh m khi t vo trong stack th c li hn l t trong b nh heap. Nh vy,chng ta ch nn s dng nhng cu trc ch vi nhng kiu d liu nh, v nhng hnh vi hay thuc tnh ca n ging nh cc kiu d liu c xy dng sn.

Trong bi ny chng ta s tm hiu cch nh ngha v lm vic vi kiu cu trc v cch s dng Constructror khi to nhng gi tr ca cu trc.

nh ngha mt struct

C php khai bo mt struct cng tng t nh cch khai bo mt lp:

[thuc tnh] [b sung truy cp] struct <tn cu trc> [: danh sch giao din] { [thnh vin ca cu trc] }

V d sau minh ha cch to mt cu trc. using System; public struct Location { public Location( int xCoordinate, int yCoordinate) 63 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ { xVal = xCoordinate; yVal = yCoordinate; } public int x { Get { return xVal; } set { xVal = value; } } public int y { get { return yVal; } set { yVal = value; } } public override string ToString() { return (String.Format({0}, {1}, xVal, yVal)); } // thuc tnh private lu to x, y 64 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ 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); } }

Nhng im khc nhau gia Class v Struct

Struct khng h tr tha k. Struct c tha k t lp object nhng khng th tha k t cc lp khc hay cc struct khc. Struct lun c ngm nh l sealed, ngha l khng c lp hay struct no c th k tha n. Tuy nhin struct c th thc thi nhiu giao din nh class. Struct khng c constructor v destructor mc nh. Khng cho php khi to cc trng th hin ( instance fields) trong struct v th on m sau s khng hp l: private int xVal = 20; private int yVal = 50; 65 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@

To struct:

Chng ta to mt th hin ca struct bng cch s dng t kha new trong cu lnh gn, nh khi chng ta to mt i tng ca lp. Nh trong v d, lp Tester to mt th hin ca Location nh sau:

Location loc1 = new Location( 200, 300); y mt th hin mi tn l loc1 v n c truyn hai gi tr l 200 v 300.

Struct l mt kiu gi tr v c lu tr trn stack. Chng ta cng c th truyn struct vo hm nh cc tham s khc.

Bi 17: Namespace trong C#


Ta c th hiu Namespace l mt gi nhng thc th c thuc tnh v hnh vi c lp vi bn ngoi. Nhng u im ca namespace c lit k nh sau:

Trnh c s trng lp tn gia cc class. Cho php t chc m ngun mt cch c khoa hc v hp l.

Khai bo mt Namespace namespace NamespaceName { // ni cha ng tt c cc class } Trong , Namespace: l t kha khai bo mt NameSpace NamespaceName: l tn ca mt Namespace V d

namespace CSharpProgram { class Basic 66 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ { } class Advance { } }

Bi 18: Luyn tp (Phn ngn ng C#) Hy nh li bi hc u tin, bn c hc cch m mt ng dng console trong Visual Studio.net v g nhng dng code u tin Hello C#. Gi y bn hon ton lm ch c ngn ng ny ri. Chng ta hy cng im li nhng kin thc trng tm ca ton kha hc qua bi n tp ny. I. Nhc li nhng c im ca ngn ng C# C# l mt sn phm ca microsoft, l mt ngn ng hng i tng kh thn thin v mm do m bn c th s dng xy dng cc ng dng destop hay web. C# c sn cc th vin vi cc hm h tr mnh cho vic lp trnh. Bn cn phi nh mt s nguyn tc sau:

C# l ngn ng phn bit hoa thng Quy tc t tn trong C# Quy tc vit ch thch. Cch khai bo cc th vin dng trong chng trnh

II. Cc kiu d liu trong c# C# c 2 loi d liu l d liu kiu value v d liu ki reference. Kiu value hu ht l nhng kiu c sn cn kiu reference hu ht l nhng kiu do ngi dng nh ngha. Bng di y tng hp cc kiu d liu c xy dng sn: Kiu object string sbyte short int long byte 67 Khai bo object o = null; string s = "hello"; sbyte val = 12; short val = 12; int val = 12; long val1 = 12; long val2 = 34L; byte val1 = 12; http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ ushort uint ushort val1 = 12; uint val1 = 12; uint val2 = 34U; ulong val1 = 12; ulong val2 = 34U; ulong val3 = 56L; ulong val4 = 78UL; float val = 1.23F; double val1 = 1.23; double val2 = 4.56D; bool val1 = true; bool val2 = false; char val = 'h'; decimal val = 1.23M;

ulong

float double bool char decimal III. Cc loi lnh ca C#

Bng sau s tng hp li ton b cc loi lnh ca C# Cu lnh Cu lnh n v khi lnh V d minh ha static void Main() { F(); G(); { H(); I(); } } static void Main(string[] args) { if (args.Length == 0) goto done; Console.WriteLine(args.Length); done: Console.WriteLine("Done"); } static void Main() { const float pi = 3.14f; const int r = 123; Console.WriteLine(pi * r * r); } static void Main() { int a; int b = 2, c = 3; a = 1; http://www.itgatevn.com.vn

Khai bo nhn v lnh goto

Khai bo cc hng khu vc ( Local constan)

khai bo cc bin khu vc (local variable)

68

Su tm v edit bi Oki@kimur@ Console.WriteLine(a + b + c); Cc biu thc lnh (Expression Statement) } static int F(int a, int b) { return a + b; } static void Main() { F(1, 2); // Expression statement } static void Main(string[] args) { if (args.Length == 0) Console.WriteLine("No args"); else Console.WriteLine("Args"); } static void Main(string[] args) { switch (args.Length) { case 0: Console.WriteLine("No args"); break; case 1: Console.WriteLine("One arg "); break; default: int n = args.Length; Console.WriteLine("{0} args", n); break; } } static void Main(string[] args) { int i = 0; while (i < args.Length) { Console.WriteLine(args[i]); i++; } } static void Main() { string s; do { s = Console.ReadLine(); } while (s != "Exit"); } static void Main(string[] args) { for (int i = 0; i < args.length; i++) Console.WriteLine(args[i]); } static void Main(string[] args) { foreach (string s in args) http://www.itgatevn.com.vn

Lnh If

Lnh Switch

Lnh While

Lnh DoWhile

Lnh For

Lnh foreach 69

Su tm v edit bi Oki@kimur@ Console.WriteLine(s); Lnh break } static void Main(string[] args) { int i = 0; while (true) { if (i == args.Length) break; Console.WriteLine(args[i++]); } } static void Main(string[] args) { int i = 0; while (true) { Console.WriteLine(args[i++]); if (i < args.Length) continue; break; } } static int F(int a, int b) { return a + b; } static void Main() { Console.WriteLine(F(1, 2)); return; } static int F(int a, int b) { if (b == 0) throw new Exception("Divide by zero"); return a / b; } static void Main() { try { Console.WriteLine(F(5, 0)); } catch(Exception e) { Console.WriteLine("Error"); } }

Lnh continue

Lnh return

Lnh Throw v try catch

Bi hc sau s tng hp cc kin thc v hng i tng trong C#.

Bi 19: Luyn tp- phn hng i tng trong C#

70

http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ 1. Lp (Class ) v i tng (Object)

Khi nim v lp v i tng Lp l mt khi nim m t cho nhng thc th c chung tnh cht v hnh vi c th ni lp l mt khun mu cho cc i tng. Cn i tng l nhng i din cho lp, mi i tng u c chung tnh cht v hnh vi m lp nh ngha. Cc thnh phn ca lp Cc thnh phn ca lp gm: Fields, properties v Methods v cc thnh phn ny c phn lm 2 loi l static v instance.

Trong : Fields l cc phn t dng th hin cc bin trong lp. Properties l phn t dng truy cp n c im ca mt i tng hoc mt class. Properties
c nh ngha bng 2 phn, phn th nht ging nh nh ngha Fields, phn th 2 c thm 2 phn t get v set.

Methods hay phng thc chnh l cc hnh vi c nh ngha trong class. N dng thc
hin mt cng vic no ca mt i tng hay mt class. Khi hc v method bn cn c bit lu n cc vn v Methods overloading, Constructor, Destructor v cch truyn tham s cho method. Lp Abstract class v Sealed class L 2 lp c bit ca C# trong :

Abstract class l lp cha phng thc Abstract hay phng thc o- tc l cc phng thc ch
c khai bo ch khng thc thi hnh ng no. Abstract class ch c dng lm lp cha cho cc lp k tha.

Sealed class l lp khng bao gi c k tha. Nu bn khai bo mt lp dn xut t mt lp


Sealed class th chng trnh s bo li. 2. Struct.

Khi nim v Struct Struct l mt kiu d liu n gin do ngi dng nh ngha, c kch thc nh v c th c dng thay cho lp. Struct cng cha nhng thnh phn tng t nh lp. Cch khai bo v s dng 71 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ [thuc tnh] [b sung truy cp] struct <tn cu trc> [: danh sch giao din] { [thnh vin ca cu trc] } Phn bit Struct vi Class Struct l kiu d liu gi tr cn class l kiu tham chiu. Struct lun c mc nh l sealed khng h tr inheritance, constructor v destructor. Nhng struct cng c th thc thi nhiu giao din nh class. 3. Inheritance

Khi nim v Inheritance Inheritance l vic mt class c th k tha (s dng li) cc thuc tnh v cc phng thc c nh ngha t mt class khc. Khi class k tha c gi l lp dn xut hay lp con cn lp c k tha l lp c s hay lp cha. Khai bo v s dng Inhertance. Khai bo lp B k tha lp A: class A {} class B: A {} 4. Overriding method v Polimorphysm

Phn bit gia Overriding method v Polimorphysm Overrding methed l mt hm cng tn cng kiu c khai bo trong lp con v s override hm trong lp cha. Polimorphysm khng ch override hm trong lp cha m n cn override thng minh. S khc bit quan trng gia Overriding method v Polimorphysm l trong Polimorphysm vic quyt nh gi hm c thc hin khi chng trnh chy. 5. Interface

Giao din l rng buc, giao c m bo cho cc lp hay cc cu trc s thc hin mt iu g . Khi mt lp thc thi mt giao din, th lp ny bo cho cc thnh phn client bit rng lp ny c h tr cc phng thc, thuc tnh, s kin v cc ch mc khai bo trong giao din. Khai bo mt giao din: 72 http://www.itgatevn.com.vn

Su tm v edit bi Oki@kimur@ [thuc tnh] [phm vi truy cp] interface <tn giao din> [: danh sch c s] { <phn thn giao din> } 6. Namespace

Ta c th hiu Namespace l mt gi nhng thc th c thuc tnh v hnh vi c lp vi bn ngoi. Khai bo mt Namespace namespace NamespaceName { // ni cha ng tt c cc class } Trong , Namespace: l t kha khai bo mt NameSpace. NamespaceName: l tn ca mt Namespace.

Ht Chc cc bn hc tt ^^!

73

http://www.itgatevn.com.vn

You might also like