Download as pdf or txt
Download as pdf or txt
You are on page 1of 409

Ngn ng lp trnh C#

Nguyn Hng Phng Khoa CNTT, i hc Bch Khoa H Ni

Ti liu tham kho


Nguyn Thin Bng, Phm Ngc Thch, Hong c Hi. Tng bc hc lp trnh Visual C#.net. Nh xut bn lao ng x hi. Phng Lan, Phm Hu Khang. K thut lp trnh ng dng C#.net ton tp. Tp 1,2,3. Nh xut bn lao ng x hi.2002. E-books

Ni dung mn hc
PHN PHN PHN PHN PHN I: Gii thiu VC# II: Ngn ng C# III: To Component IV: Cc ng dng Window V: To ng dng web

PHN I: Gii thiu VC#


M u Bin, ton t, biu thc Vit phng thc v p dng phm vi Cc cu lnh la chn Pht biu lp Qun l li v ngoi l

PHN II: Ngn ng C#


i tng v lp Tham chiu v tham tr Cc kiu gi tr vi bng lit k v cu trc Mng v tp hp Mng tham s K tha B thu gom rc v x l ti nguyn

PHN III: To Component


Truy xut cc thuc tnh B ch mc y nhim hm v s kin Np chng ton t

PHN IV: Cc ng dng Window


Windows Form Trnh n Thc thi hiu lc Cc iu khin phc tp MDI, ca s v hp thoi GUI Component C s d liu Kt ni d liu v DataSets XML

PHN V: To ng dng web


Gii thiu ASP.net iu khin xc nhn s hp l Truy cp d liu vi cc form trn Web To ng dng ASP.net Dch v web da trn XML S dng dch v web

Chng 1: M u

Nguyn Hng Phng Khoa CNTT, i hc Bch Khoa H Ni

Ni dung chng 1
Khi ng Microsoft Visual Studio .NET S dng mi trng lp trnh Visual Studio.NET Vit ng dng dng lnh vi C# Vit ng dng Windows vi C#

Khi ng Microsoft Visual Studio .NET VS.NET l mi trng lp trnh cung cp rt nhiu cng c cn thit cho vic xy dng cc d n ln v nh Ci t:
Ci IIS B VS.NET 2003 (3 a CD)1312 B VS.NET 2005 (4 a CD) Ci b MSDN
3

Khi ng Microsoft Visual Studio .NET

Khi ng Microsoft Visual Studio .NET

Vit ng dng dng lnh vi C#

Vit ng dng dng lnh vi C#

Cc tp tin trong khung ca s Solution Explorer


TextHello.sln: tp tin gii php cp trn cng. N gm 1 hoc nhiu tp tin d n. TextHello.csproj: tp tin d n ca C#. N gm 1 hoc nhiu tp tin ngun (vit cng 1 ngn ng). Class1.cs: tp tin ngun ca C#. AssemblyInfo.cs:tp tin ngun khc, dng thm mt s thuc tnh vo chng trnh. App.ico: icon xut hin trn thanh tc v
8

Vit chng trnh u tin


Tp tin Class.cs nh ngha mt lp c tn Class1 cha mt phng thc Main. Ch : C# l ngn ng phn bit kiu ch. Ta s vit dng ch Hello BK ra mn hnh Console

Vit chng trnh u tin

10

Vit chng trnh u tin

11

Vit chng trnh u tin

12

S dng khng gian tn (Namespace)


Tranh chp tn xy ra khi:
Chng trnh ln, cha nhiu m ngun S dng th vin do t chc khc vit

Chng trnh s rc ri v kh bo tr Hng gii quyt ?


Thm tin t ng vi modul con S dng khng gian tn
13

S dng khng gian tn (Namespace)


V d: Thay v to ra mt lp c tn TextHelloGreeting, ta to lp Greeting trong khng gian tn TextHello: Namespace TextHello { class Greeting { ...... } }
14

S dng khng gian tn (Namespace)


Tham kho n lp Greeting: TextHello.Greeting Nn nh ngha cc lp trong cc khng gian tn. VS.net s dng tn d n lm khng gian tn cp ngoi cng .net Framework SDK cng tun theo quy nh ny. V d: lp Console thuc khng gian tn System. Vit tn tham kho y : System.Console. Nu ch th using System u tp tin th khng cn vit Sysem. na.
15

To ti liu dng XML v cc ghi ch


Vit chng trnh thng phi i km ti liu. Tnh trng khng ng b gia tp tin ngun v tp tin ti liu. B khung .net c t mt b cc tn th nhng trc tip vo trong ghi ch m ngun. N cng cung cp ty chn bin dch dng lnh /doc sinh ti liu m ngun dng XML
16

To ti liu dng XML v cc ghi ch


Chn View/Class View Chn th Clas View bn di khung Solution Explorer M rng n lp Class1.cs. Kch chut phi, chn properties, i tn lp thnh Greeting. Trong ca s Solution Explorer, chn Class1.cs, chn Properties, i tn file Class1.cs thnh Greeting.cs
17

To ti liu dng XML v cc ghi ch


Trong file Greeting.cs g vo: /// <summary> /// Chng trnh Hello BK trong C# /// </summary> /// <remarks> /// Chng trnh ny hin th dng ch Hello BK /// s dng phng thc WriteLine /// ca lp System.Console /// </remarks>
Chn Tools / Build Comment Web Pages
18

To ng dng Windows Forms


To mt form c cha mt text box, mt nhn v mt nt nhn. Nhp tn vo vn bn. Khi nt c nhn, li cho s c hin th trn nhn. Tin hnh:
Chn New Project t trnh n File Chn Visual C# v template l Windows Application Nhp tn d n l WinFormHello
19

To ng dng Windows Forms

20

To ng dng Windows Forms


Ko th cc iu khin ln trn form. t tn ln lt l:txtName, lblHello v btnHello S kin kch chut ca nt nhn c x l nh sau:
private void btnHello_Click(object sender, System.EventArgs e) { lblHello.Text = "Xin cho "+ txtName.Text; }
21

To ng dng Windows Forms


Chy chng trnh, kt qu l:

22

Chng 2: Bin, ton t v biu thc


Nguyn Hng Phng Khoa CNTT - HBKHN
1

Pht biu lnh


L a ra yu cu thc hin hnh ng Nm trong cc phng thc Tun theo nguyn tc c php:
Kt thc bng du chm phy ;

Vit lnh sao cho d c v d hiu

nh danh
L tn nhn ra cc phn t trong cc chng trnh Tun theo nguyn tc c php:
Dng k t ch v s Phi bt u bng k t ch K t gch di _ c xem l k t ch

V d:
Hp l: result_score, _number, a1 Khng hp l: result%, 4b,
3

T kha
C# c sn 76 t kha ca chnh n. V d: abtract, class, using, namespace, break, continue, as, do, event, is, in, new, true, if, else, float, char, finally, protected, return, string, default, for, while,. Trong ca s m ngun, mc nh t kha c mu xanh da tri.
4

S dng bin
Bin l ni lu tr gi tr tm thi. Tn bin phi l duy nht. t tn bin:
Khng dng du gch di (_) Khng nn to tn bin ch khc nhau bi ch hoa v ch thng Tn nn bt u bng k t ch thng Nn t tn theo cc chun khuyn co

Khai bo bin: ch ra kiu gi tr m n s gi v khai bo tng minh. Pht biu lnh khai bo: int age; Bin phi cha gi tr trc khi dng
5

Cc kiu d liu c s
Kiu M t Kch thc (bit) 32 64 32 64 V d

int long float double

S nguyn S nguyn S du chm ng S du chm ng chnh xc kp

int count; count = 42; long w; w = 42L; float a; a = 0.42F; double b; b = 0.42
6

Cc kiu d liu c s
Kiu M t Kch thc (bit) 128 16bit/k t 16 8 V d

decimal string char bool

Gi tr tin t Chui k t K t true hoc false

decimal coin; coin = 0.42M; string st; st = abc; char c; c = 4; bool b; b = false
7

Ton t s hc
Cc php ton: +, -, *, /, % S dng cc php ton ny trn cc gi tr char, int, long, float, double, decimal. Khng dng cho kiu bool v string. Ngoi l: du + dng ni cc chui.
8

u tin ca ton t
L th t m ton t ca biu thc c nh gi. V d: 6+5*3 C th s dng du ngoc n quyt nh u tin.

Cc ton t logic
Trong lp trnh, ta thng gp tnh hung kim tra mt vn c 2 trng thi. V d: x>4 hay khng ? Biu thc ng hay sai?... Mt ton t logic l mt ton t c kt qu ng (true) hoc sai (false). Kiu d liu bool Ch : cc ton t lm vic trn mt ton hng c gi l ton t mt ngi, lm vic trn 2 ton hng c gi l 2 ngi.
10

Cc ton t logic boolean


Ton t == != < <= > >= ngha V d Age=42 th kt qu ? false true false false true true
11

So snh bng Khc Nh hn Nh hn hoc bng Ln hn Ln hn hoc bng

Age==100 Age!=10 Age<25 Age <=25 Age>30 Age>=40

Cc ton t logic
Ton t AND, k hiu && Ton t OR, k hiu || Ton t NOT, k hiu ! Mc ch cc ton t ny l kt hp cc biu thc logic li thnh biu thc ln hn.

12

Kt hp v u tin
Hng u tin Mt ngi Nhn Cng Ton t () u tin nht ! Ph nh *, /, % +, Kt hp Tri Tri Tri Tri
13

Kt hp v u tin
Hng Quan h Bng Logic Gn Ton t <, <=, >, >= ==, != &&, || = Kt hp Tri Tri Tri Phi
14

Ton t gn kp
var= var + num var= var - num var= var * num var= var / num var *=num var -=num var *=num var /=num
Cc tan t ny c u tin v tnh kt hp phi ging ton t gn n gin

var= var % num var %=num


15

Tng v gim gi tr ca bin


Tng 1 n v cho bin:
Count +=1; Count++;

Gim 1 n v:
Count--;

Tng tin t v hu t:
Count++ v --Count

16

Chng 3: Vit phng thc v p dng phm vi


Nguyn Hng Phng Khoa CNTT, HBKHN

Khai bo phng thc


Phng thc l mt trnh t cc cu lnh c t tn. Tn ca phng thc nn l mt nh danh c ngha. Hu ht cc phng thc u nhn d liu truyn vo (u vo) v tr v kt qu (u ra).
2

Khai bo phng thc


C php:
<Kiu tr v> <tn phng thc>(ds tham s) { // cc cu lnh ca phng thc // return <gi tr> }

<Kiu tr v>: int, string, void,. <tn phng thc>:dng gi phng thc <ds tham s>: kiu v tn tham s, ngn cch nhau bi du phy (nu c nhiu) <thn phng thc>: cc dng m v tr v kt qu (c th c hoc khng)
3

Gi phng thc
S dng tn ca phng thc gi Truyn tham s cho n (nu phng thc c tham s). Nu khng c tham s th vn phi cp ng m ngoc () C php gi:
<tn phng thc>(ds tham s)

Phm vi (Scope)
Phm vi ca mt nh danh l mt vng ca chng trnh trong nh danh c s dng. Thn phng thc, thn lp to nn phm vi. Bin c to ti cu lnh nh ngha n. C th to bin bn trong phng thc.
5

Phm vi (Scope)
Bin khai bo bn trong phng thc th c phm vi trong phng thc . Chng c gi l bin cc b, khng th dng chia s thng tin gia cc phng thc. Bin khai bo bn trong thn ca 1 lp th c phm vi l lp Nhng bin khai bo bn trong lp th c gi l trng hay thuc tnh.
6

Phm vi (Scope)
C th s dng cc thuc tnh trong cc phng thc. Ch : Trong phng thc, ta phi khai bo bin trc khi s dng cn trong lp, ta c th khai bo bin sau cc phng thc.

nh danh chng(Overload Identifier) Hai nh danh m c cng tn th ta bo rng chng b np chng. Nu khai bo >=2 bin cng tn trong mt phm vi th s b bo li Nhng phng thc th c th np chng. Ti sao? V trnh bin dch c th da vo s lng v kiu ca cc tham s nhn din phng thc no c gi.
8

nh danh chng(Overload Identifier) C th np chng cc tham s ca phng thc nhng khng th chng kiu tr v. C# khng h tr cc i s mc nh s dng cc phng thc np chng. V d: vit v gi phng thc
9

Chng 4: Cc cu lnh la chn


Nguyn Hng Phng Khoa CNTT, HBKHN

Cu lnh if
C php
if(<biu thc logic>) //<cu lnh 1> else //<cu lnh 2>

Dng khi nhm cc cu lnh


{ ..... }

Cu lnh if lng
if(<biu thc logic 1>) { //<nhm lnh 1> } else if(<biu thc logic 2>) { //<nhm lnh 2> } .. else { //<nhm lnh n> }

Cu lnh switch
C php:
switch(<biu thc iu kin>) { case <biu thc hng 1>: //<cc cu lnh> break; case <biu thc hng 2>: //<cc cu lnh> break; default: //<cc cu lnh> break; }

Cu lnh switch
Ch s dng lnh ny trn cc kiu c bn int v string. Cc nhn sau t kha case l biu thc hng. Cc nhn ny phi l duy nht. Phi lp li cng c php cho cc gi tr ring l thc thi cng cc cu lnh. Cu lnh break l bt buc, k c trong phn default

Chng 5: Pht biu lp


Nguyn Hng Phng Khoa CNTT, HBKHN
1

Pht biu while


C php:
while(<biu thc iu kin>) { statement }

Biu thc iu kin c nh gi. Nu ng, cu lnh s c thc thi. C tip tc nh vy n khi biu thc iu kin khng cn ng th dng vng lp. Lu : khng c s chuyn i t dng s nguyn sang ng/sai nh trong C/C++
2

Pht biu for


C php:
for(khi to; biu thc iu kin; cp nht bin iu khin) { statement; }

C th b qua bt k phn no trong 3 phn pht biu ca for Nu bin khai bo trong phn khi to ca for th n s mt sau khi vng for kt thc.
3

Pht biu do
C php:
do statement while(<biu thc iu kin>)

break v continue
Dng break nhy khi thn vng lp Continue buc chng trnh ngay tc thi nh gi li biu thc ng/sai

Chng 6 Qun l li v ngoi l


Nguyn Hng Phng Khoa CNTT, HBKHN
1

Vn ny sinh
Cc on m chng trnh c th pht sinh cc li. Lm th no? Dng bin ton cc nhn cc gi tr li khc nhau t cc phng thc khc nhau khng hiu qu. s dng cc ngoi l

n bt ngoi l
tng: Phn cch m thc thi v m x l li khng nhp nhng vi nhau na. Hai bc:
Vit m chng trnh bn trong khi try Vit mt hoc nhiu b x l catch ngay sau khi try.
try{ statement; } catch(ObjectException obj){ process Exception }
3

V d :
try{ int lhs=System.Int32.Parse(lhsOperand.Text); int rhs=System.Int32.Parse(rhsOperand.Text); int answer=doCalculate(lhs,rhs); result.Text=answer.ToString(); } catch(System.FormatException ex){ // X l ngoi l y }
4

Nu khng c b x l catch
Method 1

Method 2

Method n
5

a b x l catch
Cc li khc nhau s a ra cc ngoi l khc nhau.
try{ // statement; } catch(Exception1 ex1){ // process exception 1 } catch(Exception2 ex2){ // process exception 2 } ..

V d:
try{ int lhs=System.Int32.Parse(lhsOperand.Text); int rhs=System.Int32.Parse(rhsOperand.Text); int answer=doCalculate(lhs,rhs); result.Text=answer.ToString(); } catch(System.FormatException ex1){ // X l ngoi l th nht y } catch(System.DivideByZeroException ex2){ }
// X l ngoi l th hai y

B x l catch tng qut


try{ int lhs=System.Int32.Parse(lhsOperand.Text); int rhs=System.Int32.Parse(rhsOperand.Text); int answer=doCalculate(lhs,rhs); result.Text=answer.ToString(); } catch(System.Exception ex){ // X l ngoi l y }

Cc li trn s hc
Gi tr cc i v cc tiu ca s nguyn: System.Int32.MaxValue v System.Int32.MinValue Gi tr cc i + 1 ? C th nm bt ngoi l OverflowException Hoc dng t kha checked v unchecked
9

Checked v unchecked

10

Checked v unchecked

11

Checked v unchecked

12

Checked v unchecked

13

Cc biu thc checked v unchecked C th dng checked v unchecked kim tra trn s trn biu thc s nguyn. V d:
int a=unchecked(System.Int32.MaxValue+1);

Cc tan t +=, -=, ++, -- cng c th s dng cc t kha ny.


14

Nm ra ngoi l
V d:
throw new System.ArgumentOutOfRangeException( Bed month)

15

Khi finally
try{ // statement } catch(){ // statement } finally{ // statement }
16

i tng v lp
Nguyn Hng Phng Khoa CNTT, HBKHN
1

Chng 7

Khi nim chung


S phn loi (Classification): Sp xp thng tin mt cch c h thng vo trong mt thc th, mt s vt, hin tng. ng gi (Encapsulation): t mt s vt, hin tng vo trong gi. ng gi lin quan n:
Kt hp d liu v phng thc bn trong mt lp (h tr phn loi). iu khin kh nng truy cp d liu v phng thc bn trong 1 lp.
2

Lp (class)
class Circle { double radius; double Area() { return 3.1415*radius*radius; } }
3

iu khin kh nng truy cp


Bn trong vs. bn ngoi lp T kha public, private Mt phng thc/trng l private nu n ch c th truy cp c t bn trong phng thc . Mt phng thc/trng l public nu n c th truy cp c t c bn trong v bn ngoi ca phng thc .
4

iu khin kh nng truy cp


V d:
class Circle { private double radius; public double Area() { return 3.1415*radius*radius; } }

Nu khng ni g th mc nh l private
5

i tng
int i; Circle c; i tng l th hin ca lp

Phng thc khi to (Constructor) Quan st 2 v d sau:


int i; Console.WriteLine(i); // Li Circle c; Console.WriteLine(c); // Li

Li dng bin cc b cha gn gi tr.


7

X l vi trng hp th nht
int i=57; Console.WriteLine(i); Hoc l: int i; i=57; Console.WriteLine(i);

Cn trng hp th hai ?

X l trng hp th hai
R rng ch c cc kiu c bn l c th c cc gi tr thc s, cn kiu ca c l mt lp. Ta dng t kha new v gi phng thc khi to:
Circle c=new Circle(); Console.WriteLine(c); Hoc: Circle c; C = new Circle(); Console.WriteLine(c);
9

Phng thc khi to


Phng thc khi to (khi dng) l mt phng thc c bit c tn trng vi tn ca lp. N khi to cc trng ca mt i tng mi. Nu ta khng vit phng thc ny cho lp ca chng ta, trnh bin dch s t ng vit h 1 ci.
10

V d phng thc khi to


class Circle { private double radius; public Circle() { radius = 0.0; } public double Area() { return 3.1415*radius*radius; } }

11

Cc trng m ta khng khi to trong phng thc khi to vn c khi u gi tr l 0, false hay null. Gi phng thc ca lp: c.Area() Mt s khuyn co khi t tn:
Cc nh danh ton cc nn bt u bng mt k t hoa. Cc nh danh khng phi ton cc nn bt u bng mt k t thng.
12

Np chng phng thc khi to


Phng thc khi to cng l phng thc. N c th c np chng. V d:
class Circle { private double radius; public Circle(){ radius = 0.0; } public Circle(double r){ radius = r; } public double Area(){ return 3.1415*radius*radius; } }

13

V d: File Point.cs
using System; namespace Classes { class Point { public Point() { x=0; y=0; } public Point(int initialX, int initialY) { x=initialX; y=initialY; } public double distanceTo(Point other) { int xDiff=x-other.x ; int yDiff=y-other.y ; return Math.Sqrt (xDiff*xDiff+yDiff*yDiff); } private int x,y; }

14

V d: File Point.cs
class Application{ static void Entrance(){ Point origin=new Point(); Point bottomRight =new Point (600,800); double distance=origin.distanceTo (bottomRight); Console.WriteLine ("Distance is :{0}",distance); } static void Main(string[] args){ try{ Entrance(); } catch (Exception caught){ Console.WriteLine(caught.Message); } } }
15

D liu v phng thc tnh

Lp Math cha cc hm ton hc: Sin, Cos, Sqrt, N khng c thc hin nh l phng thc th hin.
16

D liu v phng thc tnh


N c gi bng cch s dng tn lp ch khng phi i tng. L do: Sqrt ca lp Math l phng thc tnh. class Math{ public static double Sqrt(double d){ . } }
17

Ta c th dng t kha static to trng chia s gia cc i tng khai bo mt trng l tnh m gi tr ca n khng thay i, ta dng t kha const. V d:
class Math{ public static double Sqrt(double d){} public const double PI = 3.141593; }
18

Tham chiu v tham tr


Nguyn Hng Phng Khoa CNTT, HBKHN

Chng 8

Kiu gi tr vs. kiu tham chiu


Cc kiu c bn nh int gi l kiu gi tr v mt bin kiu int gi mt gi tr nguyn kiu trc tip. Kiu lp nh Circle gi l kiu tham chiu v mt bin Circle khng gi gi tr Circle m n tham chiu ti mt i tng Circle kiu gin tip. Kiu gi tr gi gi tr, kiu tham chiu gi tham chiu.
2

Kiu gi tr vs. kiu tham chiu


int i; i = 42; int copyi; copyi = i; int i 42 int copyi 42

Circle c; c = new Circle(42); Circle refc; refc = c;

Circle c @ Circle refc @


3

42

V d chng 8
Tp Pass.cs:

using System; namespace Parameters{ class Pass{ public static void Value(int param){ param = 42; } public static void Reference(WrappedInt param){ param.Number = 42; } } }
4

Tp WrappedInt.cs:
namespace Parameters{ class WrappedInt { public int Number; } }

Tp Main.cs:
using System; namespace Parameters{ class Application{ static void Entrance(){ int i = 0; Console.WriteLine(i); Pass.Value(ref i); Console.WriteLine(i); WrappedInt wi = new WrappedInt(); Console.WriteLine(wi.Number); Pass.Reference(wi); Console.WriteLine(wi.Number); }

Tp Main.cs (tip)
static void Main(string[] args){ try{ Entrance(); } catch (Exception caught){ Console.WriteLine(caught.Message); } } } }
7

S dng tham s ref v out


static void Value(int param){ param++; } static void Main(){ int arg = 42; Value(arg); Console.WriteLine(arg); }

Kt qu in ra l 42
8

Tham s ref
t trc mt tham s t kha ref th tham s tr thnh b danh cho i s thc s. Thao tc c thc hin trn tham s cng s c thc hin trn i s. Khi truyn mt i s cho mt tham s th trc i s ny ta cng phi t t kha ref.
9

Tham s ref - v d:
static void Value(ref int param){ param++; } static void Main(){ int arg = 42; Value(ref arg); Console.WriteLine(arg); // Kt qu 43 }
10

Ch :
Phi gn gi tr cho mt bin trc hi dng n lm i s ref truyn vo cho tham s ref. V d sau bo li:
static void Value(ref int param){ param++; } static void Main(){ int arg; // khng khi gn gi tr Value(ref arg); Console.WriteLine(arg); }
11

Tham s out
T kha out cng ging t kha ref Nu ta t t kha out trc mt tham s th tham s ny s tr thnh b danh cho i s. Khi truyn i s cng phi t t kha out trc i s. S khc nhau l, mt phng thc khng phi gn gi tr cho tham s ref nhng phi gn mt gi tr cho tham s out.
12

Tham s out (tip)


Li v phng thc Value khng gn gi tr cho tham s param:

static void Value(out int param){ }


Khng c li:

static void Value(out int param){ param = 42; }


13

Tham s out (tip)


static void Value(out int param){ param = 42; } static void Main(){ int arg; // cha c khi gn Value(out arg); Console.WriteLine(arg);// in ra 42 }
14

Stack v Heap
B nh my tnh c chia thnh mt s on. Hai on quan trng:
Stack: khi gi phng thc, b nh c yu cu cho cc tham s v cc bin cc b. Khi phng thc kt thc, vng nh c gii phng. Heap: Khi to mt i tng s dng t kha new v li gi phng thc khi dng. N s c gii phng mt cch t ng khi kt thc.
15

Stack v Heap
STACK HEAP

int param 42

void Method(int param){ Circle c; c = new Circle(); }

Circle c @

42

16

Lp System.Object
Lp Object trong khng gian tn System l kiu tham chiu quan trng.
namespace System { class Object { } }
17

Lp System.Object
Tt c cc lp hon ton k tha t lp System.Object Ta vit:
class Circle{ }

C ngha l:
class Circle:System.Object{ }

18

Lp System.Object
Khi nim k tha, chng ta s hc trong chng 12. Mt bin kiu Object c th tham chiu ti mt th hin ca bt k lp no. STACK HEAP
object o Circle c; c = new Circle(param); object o; o = c; Circle c @
19

@ 42

C ch bao (boxing)
Bin kiu object c th tham chiu ti bt k i tng ca kiu tham chiu hoc tham chiu ti bn sao ca kiu gi tr
STACK HEAP int i int i = 42; object o = i; object o @
20

42 42

Khng bao (Unboxing)


Mt bin kiu i tng c th tham chiu ti mt bn sao ca mt gi tr c bao.
object o = 42; int i = o; // Li bin dch
STACK Unboxing object o = 42; int i = (int) o; 42 HEAP

21

Kiu lit k v cu trc


Nguyn Hng Phng Khoa CNTT, HBKHN

Chng 9

Kiu lit k
Dng t kha enum to kiu lit k. Ton b gi tr ca n c gii hn trong tp tn k hiu. V d: khai bo kiu enum c tn l Season, gi tr ch gii hn trong cc tn k hiu Spring , Summer, Fall, Winter:
enum Season {Spring, Summer, Fall, Winter}
2

Kiu lit k
Cc tn k hiu phi nm trong cp ngoc nhn, phn cch nhau bng du phy.
enum Season {Spring, Summer, Fall, Winter}
0 1 2 3

enum Season {Spring=1, Summer, Fall, Winter}

4
3

Kiu lit k
c php cho nhiu hn mt lit k ch c cng gi tr. V d:
enum Season {Spring, Summer, Autumn = Fall, Winter}

Chn kiu c s cho kiu lit k:


Cc lit k ch c cc gi tr kiu int. Kiu c s mc nh l kiu int. Ta c th chn kiu c s khc cho kiu lit k, v d:
enum Season:short {Spring, Summer, Fall, Winter}

Cc kiu c s l 1 trong 8 kiu sau:byte, sbyte, short, ushort, int, uint, long, ulong.

S dng kiu lit k


Dng tn kiu lit k nh cc kiu khc.V d:
enum Season:short {Spring, Summer, Fall, Winter} class Example{ public void Method(Season param){ Season localvar; } . }

Kiu lit k l kiu gi tr (cc bin c kiu lit k gi gi tr ca n trc tip trong ngn xp).
5

S dng kiu lit k


Phi khi gn gi tr cho cc bin kiu lit k trc khi dng.
Season colorful; Console.WriteLine(colorful);// li thi gian bin dch Season colorful = Season.Fall; string name = colorful.ToString(); Console.WriteLine(name); // xut hin Fall Console.WriteLine(colorful);// xut hin Fall
6

Lu :
Ta phi vit Season.Fall ch khng c vit Fall C th chuyn i mt bin kiu lit k thnh mt chui cha gi tr ch. Khi xut ra mt bin kiu lit k, trnh bin dch t ng xut ra tn ca ch ph hp vi gi tr ca bin.

S dng kiu lit k


C th nhn gi tr s nguyn c s ca mt bin kiu lit k
enum Season:short{Spring, Summer, Fall, Winter} Season colorful = Season.Fall; Console.WriteLine((int) colorful); // xut ra s 2

Kiu cu trc
Ta quen thuc vi khi nim record trong Pascal hay struct trong C. Trong C#, ta cng dng t kha struct to ra kiu gi tr ca ring ta. Mt cu trc c th c cc trng, cc phng thc v thm ch cc phng thc khi dng ging nh lp
9

Khai bo kiu cu trc


khai bo kiu gi tr c cu trc, ta dng t kha struct, phn thn nm gia hai du ng m ngoc nhn. V d: cu trc Time c ba trng kiu public
struct Time{ public int hours, minutes, seconds; }
10

Khai bo kiu cu trc


struct Time{ private int hours, minutes, seconds; public Time(int hh, int mm, int ss){ hours = hh%24; minutes = mm%60; seconds = ss%60; } public int Hours(){ return hours; } }
11

S khc nhau gia cu trc v lp


V mt c php, cu trc v lp kh ging nhau. Tuy nhin, chng c mt s im khc bit. Khng th khai bo mt phng thc khi dng khng tham s cho mt cu trc. V d:
struct Time{ public Time(){ } }
12

// li thi gian bin dch

S khc nhau gia cu trc v lp


Nu khng khi to mt trng trong lp, th trnh bin dch s t ng gn cho n gi tr 0, False hoc null. i vi cu trc, ta phi khi to tng minh tt c cc trng trong cc phng thc khi to. V d:
struct Time{ public Time(int hh, int mm){ hours = hh; minutes = mm; } // li thi gian bin dch v seconds k c khi to }
13

S khc nhau gia cu trc v lp


Trong mt lp, c th khi to th hin cc trng lc khai bo, cn vi cu trc th khng. V d:
struct Time{ private int hours = 0; // li thi gian bin dch private int minutes; private int seconds; }

14

S khc nhau gia cu trc v lp


Cu hi
Kiu gi tr hay kiu tham chiu?

Cu trc
Kiu gi tr!

Lp
Kiu tham chiu! Cc i tng tn ti trn Heap C Sai

Cc th hin tn ti trn ngn xp Cc gi tr hay vng nh heap? tn ti trn ngn xp C th khai bo mt phng thc khi to mc nh? Nu khai bo phng thc khi to, trnh bin dch s vn vit phng thc khi to khc Nu k khi to 1 trng trong phng thc khi to, trnh bin dch s t ng khi to? c php khi to th hin ca cc trng ti im khai bo chng? Khng ng

Sai

ng

Khng

c
15

Sau khi khai bo kiu cu trc, ta dng tn cu trc nh tn ca 1 kiu bt k. V d:


struct Time{ private int hours, minutes, seconds; } class Example{ public void Method(Time param){ Time localvar; } private Time field; }
16

Khai bo cc bin cu trc

Bin cu trc
Mt kiu cu trc l mt kiu gi tr. Cc bin cu trc gi gi tr v tn ti trn ngn xp. V d: ta khai bo 1 bin cc b now kiu Time:
STACK ? ? ?
17

now.hours Time now; now.minutes now.seconds

Php gn xc nh cho cu trc


Nguyn tc gn xc nh cho bin cu trc l mt chui kt hp t nhin cc nguyn tc gn xc nh cho tt c cc trng ca n. Khi khai bo 1 bin cu trc, cc trng trong bin k c khi to v cc gi tr ca n k th c c cho n khi n c gn xc nh. V d:
Time now; now.hours = 11; Console.WriteLine(now.hours); // bin dch thnh cng Console.WriteLine(now.minutes); // li cha gn
18

Gi phng thc khi to ca cu trc Phng thc khi dng cho cu trc lun tn ti v lun gn 0, False hoc null cho cc trng. Dng t kha new
STACK 0 0 0
19

now.hours Time now = new Time(); now.minutes now.seconds

Gi phng thc khi to ca cu trc


V d di y bin dch thnh cng:
Time now = new Time(); Console.WriteLine(now.hours); // xut ra 0 Console.WriteLine(now.minutes); // xut ra 0 Console.WriteLine(now.seconds); // xut ra 0

Nu bn vit phng thc khi dng ca chnh mnh, bn c th dng khi to mt bin cu trc. V d:
20

Gi phng thc khi to ca cu trc


struct Time{ public Time(int hh, int mm){ hours = hh; minutes = mm; seconds = 0; } private int hours, minutes, seconds; }
21

Gi phng thc khi to ca cu trc


Time now = new Time(12, 30); Console.WriteLine(now.hours); // xut ra 12 Console.WriteLine(now.minutes); // xut ra 30 Console.WriteLine(now.seconds); // xut ra 0
STACK 12 30 0
22

now.hours Time now = new Time(12,30); now.minutes now.seconds

Sao chp cc bin cu trc


Time now = new Time(12, 30); Time copy = now;
now.hours Time now = new Time(12,30); now.minutes now.seconds copy.hours Time copy= now copy.minutes copy.seconds STACK 12 30 0 12 30 0

23

S tng ng ca kiu t kha


Kiu c s int thc s l kiu cu trc. T kha int l b danh cho kiu cu trc Int32 trong khng gian tn System. Ta c th vit:
int number = 42; hoc System.Int32 number = 42;

C 4 cch khi to gi tr bin nguyn v 0: int a = new System.Int32();


int b = new Int32(); int c = new int(); int d = 0;
24

S tng ng ca kiu t kha


System.Int32 cha phng thc tnh Parse(), ta c th dng t kha int:
int hour = System.Int32.Parse(Console.ReadLine()); int hour = int.Parse(Console.ReadLine());

25

S tng ng ca kiu t kha


T kha bool byte decimal double float int long Kiu tng ng System.Boolean System.Byte System.Decimal System.Double System.Single System.Int32 System.Int64 Lp/ cu trc struct struct struct struct struct struct struct
26

S tng ng ca kiu t kha


T kha object sbyte short string uint ulong ushort Kiu tng ng System.Object System.SByte System.Int16 System.String System.UInt32 System.UInt64 System.UInt16 Lp/ cu trc class struct struct class struct struct struct
27

Mng v tp hp
Nguyn Hng Phng Khoa CNTT, HBKHN
1

Chng 10

Mng
Mng l mt chui cc phn t cng kiu, tn ti trong mt khi lin tc ca b nh v c truy xut bi ch mc s nguyn. Mng rt hu dng khi chng trnh phi x l mt nhm c trt t cc hng mc tng t nhau. Khai bo bin mng: type[] name;
V d: int[] arrint;
2

To cc th hin ca mng
Cc mng l cc kiu tham chiu, khng phi l kiu gi tr. Mt bin mng tham chiu ti mt th hin ca mng trn vng nh heap. Do , khi khai bo mt bin mng, ta khng ch ra kch thc ca n. Ta ch cn kch thc ca mt mng khi to th hin ca mng. Ch : khai bo mt bin mng khng to ra mt th hin ca mng.
3

To cc th hin ca mng
to ra mt th hin ca mng, bn dng t kha new km theo tn kiu v kch thc mong mun trong cp ngoc vung: new int[3]; V d: int [] arrint = new int[3];
STACK int[] arrint; int[] arrint ? int[] arrint arrint = new int[3]; @ 0 0 0
4

HEAP

To cc th hin ca mng
Kch thc ca mt mng c th c tnh ton thi gian thc thi, n khng nht thit phi l hng s thi im bin dch. V d:
int size = int.Parse(Console.ReadLine()); int[] arrint = new int[size];

Mng c kch thc 0 th khc null. To mng 2 chiu:


int[ , ] = new int[3,4];
5

Khi to bin mng


Khi mt th hin mng c to, cc phn t ca n u c khi to mt gi tr mc nh (ty thuc vo kiu ca chng).
Cc kiu s, lit k c khi to gi tr 0. Kiu bool c khi to gi tr false. Kiu tham chiu c khi to gi tr null.

Bn c th khi to gi tr ca cc phn t mng bng cc gi tr c th. V d:


int[] arrint = new int[3]{ 5, 8, 3};
6

Khi to bin mng


Cc gi tr trong cp ngoc nhn trn c th c tnh trong thi gian thc thi. V d:
Random r = new Random(); int[] arrint = new int[3]{ r.Next() % 10, r.Next() % 10, r.Next() % 10 }
7

Khi to bin mng


S gi tr gia cp ngoc nhn phi bng vi kch thc ca th hin mng ang c khi to. V d:
int[] arrint = new int[3]{ 5, 8};// li bin dch int[] arrint = new int[3]{ 5, 8, 3, 4};//li int[] arrint = new int[3]{ 5, 8, 3}; // thnh cng

khi to, ta cng c th vit:


int[] arrint = { 5, 8, 3}; Cch vit ny ch p dng cho khi to mng int[] arrint = new int[3]{ 5, 8, 3}; arrint = { 7, 1, 2}; // li arrint = new int[3]{ 7, 1, 2};// thnh cng
8

Khi to bin mng


Khi to mng cu trc:
Time[] schedule = new Time[2]{new Time(11,35), new Time(7,15)};

Truy xut cc phn t ca mng


truy xut cc phn t ca mng, ta dng tn bin mng theo sau l ch s trong cp ngoc vung. V d:
arrint[1]

a mt gi tr vo phn t mng:
arrint[1] = 5;

Ly ra gi tr t mt phn t mng:
Console.WriteLine(arrint[1]);

Vic truy xut u c kim tra ch s. Nu ch s <0 hoc kch thc th trnh bin dch s a ra ngoi l
IndexOutOfRangeException
10

V d
try{ int[] arrint = { 3, 4, 5}; Console.WriteLine(arrint[4]);// li } catch(IndexOutOfRangeException ex){ }
11

Duyt mng
Dng lnh for duyt qua tt c cc phn t ca mng:
int[] arr = { 4, 5, 6, 7}; for(int i = 0;i < arr.Length;i++){ Cosole.WriteLine(arr[i]); }

Ch cn u v cn cui.

12

Duyt mng
Dng pht biu foreach:
int[] arr = { 4, 5, 6, 7}; foreach(int i in arr){ Cosole.WriteLine(i); }

Dng foreach lun duyt qua tt c cc phn t ca mng. Nu mun duyt mt phn mng, ta dng for. Bin lp ca foreach ch c th c, nu mun thay i phn t ca mng, ta dng for.
13

Sao chp mng


Mng l kiu tham chiu, mt bin mng cha mt tham chiu n mt th hin mng. Khi bn sao chp mt bin mng, bn s c 2 tham chiu n cng mt th hin mng. V d:
int[] arr = { 4, 5, 6, 7}; int[] alias = arr;// alias v arr cng tham chiu n 1 th hin mng.

Nu mun sao chp mt th hin mng do mt bin mng ang tham chiu n, ta lm nh sau:
14

Sao chp mng


To mt th hin mng mi cng kiu v cng chiu di nh kiu bn mun sao chp. Xc lp gi tr trong mng mi c cng gi tr nh mng gc. V d:
int[] arr = { 4, 5, 6, 7}; int[] copy = new int[arr.Length]; for(int i = 0;i!=copy.Length;i++){ copy[i] = arr[i]; }
15

Sao chp mng cc phn t l kiu tham chiu


To mt mng 4 phn t triangle: Triangle[] tgl = new Triangle[4];
STACK HEAP

tgl
@ null null null null

16

Sao chp mng cc phn t l kiu tham chiu


for(int i = 0; i != tgl.Length; i++){ tgl[i] = new Triangle(); }
STACK HEAP

tgl
@ @ @ @ @

17

Sao chp mng cc phn t l kiu tham chiu


Triangle[] copy = new Triangle[tgl.Length]; for(int i = 0; i != copy.Length; i++ ){ copy[i] = tgl[i]; }
STACK HEAP

tgl
@ @ @ @ @

copy
@ @ @ @ @
18

S dng lp System.Array
Tt c cc kiu mng nh: int[], double[], object[], u k tha t lp System.Array. Tt c cc kiu mng l kiu tham chiu.
int[] arr = new int[3]{ 3, 4, 5}; Array arr = new int[3]{ 3, 4, 5}; int[] arr = { 3, 4, 5};//lm vic Array arr = { 3, 4, 5}; // li
Ging nhau

C vn !!

19

S dng lp System.Array
Thay v dng vng for sao chp cc phn t trong 1 mng vo mng khc, bn c th dng phng thc CopyTo ca th hin lp System.Array. N s sao chp ni dung ca 1 mng vo 1 mng khc vi ch mc khi u xc nh. V d:
int[] arr = { 4, 5, 6}; int[] arrcopy = new int[arr.Length]; arr.CopyTo(arrcopy,0);
20

S dng lp System.Array
Cch khc sao chp gi tr l s dng phng thc tnh Copy ca lp System.Array. V d:
int[] arr = { 4, 5, 6}; int[] arrcopy = new int[arr.Length]; arr.Copy(arr, arrcopy, arr.Length);

Cn cch khc l s dng phng thc tnh Clone ca lp System.Array. V d:


int[] arr = { 4, 5, 6}; int[] arrcopy = (int[])arr.Clone();
21

Lp tp hp
B khung Microsoft .NET c mt khng gian tn System.Collection cha mt s lp cung cp cc gii php sn sng thc thi trong cc trng hp c bit. Tt c cc lp collection u chp nhn, gi v tr v cc phn t ca n dng cc i tng (kiu phn t ca lp tp hp lun l i tng).
22

Lp tp hp

i chiu mng s nguyn v mng i tng

Chng ta s i chiu mt mng cc s nguyn v mt mng cc i tng:


Mng cc bin int gi trc tip cc gi tr int
STACK arr @ 2 7 5 8 HEAP

int[] arr = { 2, 7, 5, 8};


23

Lp tp hp

i chiu mng s nguyn v mng i tng Mng i tng: c th thm cc gi tr ca bt k kiu no vo mng ny.
STACK 2 arr @ @ @ @ @ HEAP 5

7 object[] arr = { 2, 7, 5, 8};

8
24

4 lp tp hp thng dng
Lp Lp Lp Lp ArrayList Queue Stack SortedList

25

4 lp tp hp thng dng

Lp ArrayList

Hn ch ca mng:
Mun thay i kch thc: to mng mi, sao chp v cp nht tham chiu. Nu mun b bt phn t: xa phn t , dn toa cc phn t pha sau. Nu mun chn 1 phn t vo mng: di cc phn t sau i 1 v tr ri mi chn.

Lp ArrayList gii quyt nhng hn ch ny:


Dng phng thc Remove loi b 1 phn t khi ArrayList. Dng phng thc Add thm 1 phn t vo cui. Chn 1 phn t bng phng thc Insert.
26

4 lp tp hp thng dng

Lp ArrayList

V d dng ArrayList xut cc s t 5 xung 1 ra mn hnh:


using System; using System.Collections; ArrayList countdown = new ArrayList(); // gn gi tr vo ArrayList foreach(int numbers in new int[]{5,4,4,3,2,1}){ countdown.Add(numbers); }
27

4 lp tp hp thng dng

Lp ArrayList

// b phn t u tin c gi tr l 4 countdown.Remove(4); // duyt qua 5 phn t cn li dng pht biu for for(int i=0; i != countdown.Count; i++){ int number = (int)countdown[i]; Console.WriteLine(number); } // duyt qua 5 phn t cn li dng foreach foreach(int number in countdown){ Console.WriteLine(number); }
28

4 lp tp hp thng dng

Lp Queue

Vo trc ra trc (FIFO). Ly ra t u hng, thm phn t vo cui hng. V d:


using System; using System.Collections; Queue numbes = new Queue(); ... // in gi tr vo hng i foreach(int number in new int[]{1,2,3,4}){ numbers.Enqueue(number); } . // duyt hng i foreach(int number in numbers){ Console.WriteLine(number); } // lm rng hng i While(numbers.Count != 0){ int number = (int)numbers.Dequeue(); }

29

4 lp tp hp thng dng

Lp Stack

Vo sau ra trc LIFO Xem v d:


using System; using System.Collections; Stack numbes = new Stack(); ... // in gi tr vo ngn xp foreach(int number in new int[]{1,2,3,4}){ numbers.Push(number); } . // duyt ngn xp foreach(int number in numbers){ Console.WriteLine(number); } // lm rng ngn xp while(numbers.Count != 0){ int number = (int)numbers.Pop(); }

30

4 lp tp hp thng dng

Lp SortedList

SortedList duy tr trong n 2 mng i tng: kha v gi tr. Mng kha lun c sp th t. V d:
using System; using System.Collections; SortedList map = new SortedList(); // in gi tr vo SortedList string[] keys = {these, are, the, keys}; for(int i=0; i !=keys.Length;i++){ string key = keys[i]; int value = i; map[key] = value; }
31

4 lp tp hp thng dng // duyt SortedList

Lp SortedList

foreach(DictionaryEntry element in map){ string key = (string)element.Key; int value = (int)element.Value; Console.WriteLine(Key:{0}, Value:{1}, key, value); }

Kt qu:

32

So snh mng v tp hp
Mng khai bo kiu phn t m n lu gi, tp hp th khng. Mt th hin mng c kch thc c nh, mt tp hp c th thay i kch thc khi cn. Mng l mt cu trc d liu c/ghi, tp hp c th ReadOnly.

33

Mng tham s
Nguyn Hng Phng Khoa CNTT, HBKHN

Chng 11

To cc phng thc np chng


Np chng (overload) l k thut khai bo nhiu hn 2 phng thc c cng tn trong cng 1 phm vi. iu ny l c li khi bn mun thc hin cng mt cch thc hnh ng trn nhng i s u vo khc nhau V d kinh in: phng thc Console.WriteLine.
class Console{ public static void WriteLine(int parameter) public static void WriteLine(double parameter) public static void WriteLine(decimal parameter) }
2

S dng i s mng
Phng thc Min tm s nguyn nh nht trong mng s:
class Util{ public static int Min(int[] array){ if(array==null || array.Length ==0){ throw new ArgumentException(Util.Min); } int currentMin = array[0]; foreach(int i in array){ currentMin = i; } } }
3

S dng i s mng

Dng phng thc Min tm gi tr nh nht trong 2 gi tr:


int[] array = new int[2]; array[0] = first; array[1] = second; int min = Util.Min(array);

Dng phng thc Min tm gi tr nh nht trong 3 gi tr:


int[] array = new int[3]; array[0] = first; array[1] = second; Array[2] = third; int min = Util.Min(array);

Khai bo mng tham s


Dng t kha params
class Util{ public static int Min(params int[] array){ if(array==null || array.Length ==0){ throw new ArgumentException(Util.Min); } int currentMin = array[0]; foreach(int i in array){ currentMin = i; } } }
5

Dng t kha params

Ta c th gi phng thc Min bng cch truyn mt s s nguyn.


int min = Util.Min(first, second); // tm min trong 2 s int min = Util.Min(first, second, third);// tm min trong 3 s

Thc cht, trnh bin dch s t ng chuyn i sang m lnh:


int[] array = new int[2]; array[0] = first; array[1] = second; int min = Util.Min(array); int[] array = new int[3]; array[0] = first; array[1] = second; Array[2] = third; int min = Util.Min(array);
6

Dng t kha params

Lu :

Ch dng t kha params trn mng 1 chiu.


// trnh bin dch bo li public static void Min(params int[,] table)

T kha params khng to nn ch k cho 1 phng thc khng th np chng.


// trnh bin dch bo li public static void Min(int[] array) public static void Min(params int[] array)

Khng c dng ref hay out trong mng tham s.


// trnh bin dch bo li public static void Min(ref params int[] array) public static void Min(out params int[] array)

Dng t kha params

Lu :

Mt mng tham s phi l tham s cui cng. Cc quy tc chuyn i kiu p dng cho cc i s. Trnh bin dch s d tm v t chi bt k s np chng m h no.V d:
// bin dch c li public static int Min(params int[] array) . public static int Min(int, params int[] array)
8

// trnh bin dch bo li public static void Min(params int[] array, int i)

Dng t kha params

Lu :

Mt phng thc khng c mng tham s params lun c u tin hn phng thc c mng tham s. V d:
public static int Min(int lhs, int rhs) . public static int Min(params int[] array)

Thm phng thc khng c mng tham s l 1 k thut hu ch v trnh bin dch s khng phi to v xc nh qu nhiu mng
9

Chuyn i kiu
C# cho php bn chuyn i kiu d liu t kiu ny sang kiu khc nu thc hin iu ny mang ngha. Chuyn i r rng, t ng:
float f = 99;

Hng 99 thc s l s nguyn. Trnh bin dch s chuyn n sang s thc trc khi gn cho f. Vic chuyn i ny c v l m rng ra, do khng lm mt mt thng tin.
10

p kiu

Chuyn i kiu

Ngc li, ta cng c chuyn i p kiu. D liu b thu hp li, thng tin c th b mt. V d:
float f = 99.9F; int i = (int) f;

Ta s xem xt chi tit trong chng 17


11

S dng tham s object[]


Lp System.Object l lp gc ca tt c cc lp. Xem 2 cu lnh sau:
object r1 = 42; object r2 = 42;

Cu lnh u tin gn 1 i tng chui(kiu tham chiu) cho 1 tham chiu i tng. Cu lnh sau gn 1 gi tr nguyn( kiu gi tr) cho 1 tham chiu i tng. C 2 cu lnh u c bin dch v:

Cu lnh 1: object l lp c s ca lp chui Cu lnh 2: C# s bao mt cch t ng (tham chiu i tng tham chiu n bn sao ca gi tr 42 trn vng Heap).
12

S dng tham s object[]


Xem xt m lnh sau:
object[] r = new object[10]; r[0] = 42; r[1] = 42;

Bn c th dng mng i tng tham s khai bo phng thc nhn bt k i s thuc bt k kiu no. V d:
class Black{ public static void Hole(params object[] array){ } }
13

S dng tham s object[]


Bn c th khng truyn bt k tham s no, khi trnh bin dch s truyn mt mng i tng c chiu di bng 0.
Black.Hole(); // s c chuyn thnh Black.Hole(new object[0]);

C th truyn i s null cho n:


Black.Hole(null);

14

S dng tham s object[]


C th truyn mt mng thc s cho n:
object[] r = new object[10]; r[0] = 42; r[1] = 42; Black.Hole(r);

C th truyn bt k i s no khc cho n:


Black.Hole(42,42); // c chuyn thnh Black.Hole(new object[]{42,42});
15

Phng thc Console.WriteLine


Lp Console cha nhiu b np chng cho phng thc WriteLine Xem 1 phng thc:
public static void WriteLine(String format, params object[] array);

V d cch gi phng thc trn:


Console.WriteLine(Key:{0}, Value: {1},key,value);

Trnh bin dch s gii quyt li gi ny nh sau:


Console.WriteLine(Key:{0}, Value: {1},new object[2]{key,value});
16

Phng thc Console.WriteLine


{0},{1} l cc trnh gi. Ta c th vit cc trnh gi ny theo trt t khc:
Console.WriteLine(Key:{1}, Value: {0},value,key);

17

K tha
Nguyn Hng Phng Khoa CNTT, HBKHN

Chng 12

K tha l g?
Nu ai li cho bn mt th g theo nguyn vng ca ngi y th bn c coi l k tha n. Con ci k tha mt na gen di truyn ca m, mt na ca cha. K tha trong lp trnh, mun ni n mi quan h gia cc lp.

Lp c s v lp nhn
Lp c s cn gi l lp cha, lp t tin. Lp nhn cn gi l lp dn xut, lp con chu. C php khai bo mt lp k tha t lp khc:
class <lp nhn>:<lp c s>{ }
3

Lp c s v lp nhn

Lp nhn k tha t lp c s. Mt lp khng c php nhn t hai lp tr ln. Khc vi C++, tnh cht k tha trong C# lun l ton cc. Lp System.Object l lp gc ca tt c cc lp.
class Token{ public Token(string name){ } } } }
4

class Token: System.Object{ public Token(string name){

Gi phng thc khi to ca lp c s Mt phng thc khi to lp nhn s phi gi phng thc khi to lp c s. Dng t kha base gi phng thc khi to ca lp c s.
class IdentifierToken:Token{ public IdentifierToken(string name):base(name){ } }
gi n Token(name)

Gi phng thc khi to ca lp c s

Nu bn khng gi phng thc khi to ca lp c s mt cch r rng trong mt phng thc khi to ca lp nhn th trnh bin dch s t ng chn mt li gi phng thc khi to mc nh ca lp c s
class Token: System.Object{ public Token(string name):base(){ } }
6

Gi phng thc khi to ca lp c s

on m trn hot ng bnh thng v lp System.Object c phng thc khi to mc nh ton cc. Trng hp sau, trnh bin dch s bo li:
class IdentifierToken:Token{ public IdentifierToken(string name){ // bo li } }

L do: Lp c s Token khng c phng thc khi to mc nh ton cc


7

Phng thc new


Trng hp lp c s v lp nhn cng khai bo 2 phng thc vi cng ch k (cng tn, s lng v kiu tham s) m 2 phng thc ny khng c quan h vi nhau:
class Token{ public string Name(){} } } class IdentifierToken:Token{ public string Name(){}

Thng ip xut hin bo rng vic nh ngha Name trong IdentifierToken n phng thc Name trong Token

Phng thc new

Khuyn ngh: trnh t tn ng . Nu mun 2 phng thc c cng ch k, bn dng t kha new:
class Token{ public string Name(){} } } class IdentifierToken:Token{ new public string Name(){}

Dng t kha new ch n thun l lm cho li cnh bo tt i ch khng lm g khc na.


9

Phng thc new

Xem v d sau:
static void Method(Token t){ Console.WriteLine(t.Name()); } static void Main(){ IdentifierToken variable = new IdentifierToken(variable); Method(variable); }

Hm Main khi bo 1 i tng IdentifierToken v truyn n nh i s cho phng thc Method. N thc hin IdentifierToken.Name() ? Thc cht n thc hin Token.Name().

10

Phng thc o (virtual)


trn, ta thy rng phng thc Token.Name() c gi ch khng phi phng thc IdentifierToken.Name(). phng thc mong mun c gi, bn phi dng n tnh a hnh (polymorphism). Trong lp trnh, a hnh ngha l c th thc hin cng 1 phng thc nhiu ln. Dng a hnh, bn c th lin kt phng thc Name() ca lp c s v lp nhn li v khai bo rng, chng l hai s ci t ca cng 1 phng thc.
11

Phng thc o (virtual)

Dng t kha virtual kch hot a hnh cho 1 phng thc:


class Token{ public virtual string Name(){} }

T kha virtual ch ra rng, y l s ci t th nht ca 1 phng thc tn l Name(). Lp nhn s dng t kha override khai bo s ci t khc ca 12 phng thc .

Phng thc override (ghi )


class IdentifierToken:Token{ public override string Name(){} }

Quy tc khi khai bo phng thc a hnh dng t kha virtual v override:
Khng c php khai bo phng thc cc b vi 2 t kha ny. Hai phng thc ny phi y ht nhau.
13

Quy tc khi khai bo(tip)

Ch c th ghi 1 phng thc o. Nu phng thc ca lp c s khng phi l o m bn vn c ghi n th s nhn c li bin dch. Nu lp nhn khng khai bo phng thc ny bng cch dng t override th n s khng ghi phng thc ca lp c s (gy ra cnh bo bin dch dng t kha new). Phng thc ghi hon ton l o v n c th b ghi bi con chu xa hn.
14

Kt qu ca virtual/override

Quay li v d trc, phng thc IdentifierToken.Name() s c gi.

15

Truy cp c bo v
Cc t kha public v private to ra 2 kh nng truy cp:
Cc thnh phn ton cc ca 1 lp c th truy cp ti mi th. Cc thnh phn cc b khng th truy cp ti mi th (tr bn thn lp ).

K tha l 1 trong nhng cch kt ni cc lp li vi nhau, c bit gia lp nhn v lp c s ca n. T kha protected l 1 s phn nh mi quan h gia lp nhn-lp c s
16

Truy cp c bo v

Lp nhn c th truy cp mt thnh phn ca lp c s c bo v (bn trong lp nhn, 1 thnh phn lp c s c bo v c hiu lc l ton cc). Nu lp ny khng phi l mt lp nhn th n khng th truy cp ti thnh phn lp c bo v (bn trong lp khng phi l lp nhn, mt thnh phn lp c bo v c hiu lc l cc b).
17

Giao tip(Interface)
Sc mnh thc s ca k tha xut pht t mt giao tip. Giao tip cho php tch ri hon ton tn ca 1 phng thc vi ci t phng thc y. C php:
interface Itoken{ string Name(); }

Khuyn ngh: t tn giao tip bt u bng ch I


18

Nhng hn ch
Giao tip khng bao gi cha ng s ci t. Khng th to cc th hin ca 1 giao tip. Khng c php c bt c trng (thuc tnh) no trong 1 giao din (ngay c khi n l tnh). Khng c phng thc khi to trong giao tip. Khng c phng thc hy trong giao tip.
19

Nhng hn ch

Khng th tng hp bt k kiu no (lit k, cu trc, lp, giao tip) bn trong 1 giao tip. Khng c php k tha mt giao tip t 1 cu trc hay 1 lp. Cu trc v lp cha s ci t, nu giao tip k tha t chng th n s k tha s ci t.
20

Thc hin mt giao tip


Khai bo 1 lp k tha 1 giao tip v ci t tt c cc phng thc ca giao tip . V d:
class Token:IToken{ public string Name(){ } }

21

Lu
Khi ci t 1 giao tip, phi m bo rng cc phng thc ph hp vi phng thc giao tip tng ng:
Phng thc phi c khai bo l ton cc v phng thc ca giao tip l ton cc. Kiu tr v phi ph hp Tn phi chnh xc. Tham s cng phi chnh xc (bao gm t kha ref v out, khng c params)
22

Lu :
Nu bn mun ghi s ci t 1 phng thc lp trong 1 lp nhn xa hn:
class Token:IToken{ public virtual string Name(){ } } class IdentifierToken:Token{ public override string Name(){ } }
23

K tha lp v giao tip


Mt lp c th k tha t 1 lp khc v 1 giao tip. Tn lp c s c t trc, theo sau l du phy v tb giao tip:
interface IToken{ } class DefaultTokenImpl{ } class IdentifierToken:DefaultImpl, IToken{ }
24

Lp tru tng(abstract)
Mt giao tip c th c ci t bi nhiu lp hay cu trc. Quan st v d sau:
class IdentifierToken:IToken{ public IdentifierToken(string name){ this.name = name; } public virtual string Name(){ return name;} private string name; } class StringLiteralToken:IToken{ public StringLiteralToken(string name){this.name = name; } public virtual string Name(){return name;} private string name; }
25

Lp tru tng(abstract)

Nhn xt: c s trng lp ci t. Gii php: to 1 lp ci t phng thc ny:


class DefaultTokenImpl{ public DefaultTokenImpl(string name){ this.name = name; } public string Name(){ return name; } private string name; } class IdentifierToken:DefaultTokenImpl, IToken{ public IdentifierToken(string name):base(name){} } class StringLiteralToken:DefaultTokenImpl, IToken{ public StringLiteralToken(string name):base(name){} }
26

Lp tru tng(abstract)

Vn : lp DefaultTokenImpl c th to ra i tng ca n. iu ny khng thc s c ngha lm v ta ch mun lp ny l 1 s ci t mc nh tng qut. Mc ch duy nht ca n l c cho k tha bin n thnh lp tru tng bng cch dng t kha abstract. V d:
abstract class DefaultTokenImpl{ public DefaultTokenImpl(string name){ this.name = name; } public virtual string Name(){ return name; } private string name; }

27

Lp tru tng vs. giao tip


Lp tru tng lin quan s ci t tng qut

Giao tip lin quan n cch dng

28

Phng thc tru tng


Ch c lp tru tng c php khai bo phng thc tru tng. Khng ci t phng thc tru tng. Cc lp nhn t lp ny s phi ci t phng thc tru tng.
interface IToken{ int Line(); string Name(); }
29

Phng thc tru tng abstract class DefaultTokenImpl:IToken{ public abstract int Line(); public string Name(){return name;} protected DefaultTokenImpl(string name){ this.name = name; } private string name; } class LiteralToken: DefaultTokenImpl{ public override int Line(){} }
30

Lp c nim phong
Dng t kha sealed ngn chn 1 lp tr thnh lp c s. V d:
sealed class LiteralToken:DefaultToken, IToken{ }

Nu c bt k lp no khai bo LiteralToken l lp c s th trnh bin dch s bo li. Mt lp b nim phong th khng th khai bo phng thc o.

31

Phng thc c nim phong


Dng t kha sealed khai bo 1 phng thc c nim phong. Lp nhn khng th ghi phng thc c nim phong.

32

T m l i ,
Mt giao din gii thiu tn ca 1 phng thc. Mt phng thc o l s ci t u tin ca 1 phng thc. Mt phng thc ghi l 1 s ci t khc ca 1 phng thc. Mt phng thc c nim phong l s ci t cui cng ca 1 phng thc.
33

Lm vic vi a giao tip


Mt lp c th c ti a mt lp c s nhng c th c nhiu giao tip. Lp phi ci t tt c cc phng thc m n k tha t tt c cc giao tip. Lp tru tng v lp nim phong u tun theo quy tc k tha ca lp. Giao tip khng c php k tha t bt k lp no nhng c php k tha t cc giao tip khc.
34

Lm vic vi a giao tip: C php

Nu mt giao tip, cu trc, lp k tha t hn 2 giao tip th cc giao tip ny c vit cch nhau bi du phy. Nu 1 lp cng c 1 lp c s th cc giao tip ny c lit k sau lp c s . V d:
class IdentifierToken:DefaultTokenImpl, IToken, IVisitable { }
35

Lm vic vi a giao tip: Ci t

Mt cu trc hay lp c th ci t phng thc ca 1 giao tip:


interface IVisitable{ void Accept(IVisitor visitor); } class IdentifierToken:DefaultTokenImpl, IToken, IVisitable{ void IVisitable.Accept(IVisitor visitor){.} } Vng mt b hn nh

y c gi l s ci t giao tip r rng (Explicit Interface Implementation - EII)


36

Lm vic vi a giao tip: Ci t

Gi phng thc Accept()?


IdentifierToken token = new IdentifierToken(token); token.Accept(visitor); // li bin dch, khng th truy cp IdentifierToken token = new IdentifierToken(token); ((IVisitable)token).Accept(visitor); // chp nhn

Phng thc EII c th gii quyt xung t khi c 2 phng thc t hai giao tip. V d: gi s 2 giao tip IToken v IVisitable u c phng thc ToString:
37

Lm vic vi a giao tip: Ci t interface IToken{ ...... string ToString(); } interface IVisitable{ ...... string ToString(); } class IdentifierToken:IToken, IVisitable{ ...... public string ToString(){......} }
38

Lm vic vi a giao tip: Ci t

EII cung cp cch to s ci t khc nhau ca phng thc ToString():


class IdentifierToken: IToken, IVisitable{ ...... public string IToken.ToString(){......} public string IVisitable.ToString(){......} }

39

B thu gom rc v x l ti nguyn


Nguyn Hng Phng Khoa CNTT, HBKHN
1

Chng 13

S thu gom rc
Garbage Collection Ngn ng C# phn bit gi tr v i tng. So snh gi tr v i tng:
Mt gi tr l mt th hin ca kiu gi tr, mt i tng l 1 th hin ca kiu tham chiu. V d:
int i = 42; // I l mt gi tr TextBox box = ne TextBox();// box tham chiu ti 1 i tng
2

So snh gi tr v i tng (tip)

Vng i ca 1 gi tr b buc vo phm vi m n khai bo, vng i ca 1 i tng th khng.


{ int i = 42; TextBox box = newTextBox(); } // i kt thc vng i ti y nhng box vn tn ti

Gi tr c vng i c trng rt ngn trong khi i tng c vng i c trng rt di.


3

Vng i v thi gian ca mt i tng

Bn to 1 i tng nh sau: new TextBox(); Vic to 1 i tng qua 2 giai on:


cp pht mt vng nh th t Heap (thc hin iu ny bng cch dng t kha new). chuyn i vng nh th ny thnh 1 i tng-bn phi khi to i tng (thc hin iu ny bng cch dng phng thc khi to)
4

Vng i v thi gian ca mt i tng

Thng thng khi to 1 i tng khi to bin tham chiu:


TextBox message = new TextBox();

Tham chiu n cc thuc tnh ca i tng ny bng cch dng ton t du chm(.):
message.Text = Bonjour Vietnam;

S kt thc ca 1 i tng cng l 1 qu trnh c 2 giai on ngc vi 2 giai on to i tng:


chuyn i tng tr li thnh vng nh th (thc hin iu ny bng cch dng phng thc hy) vng nh th c chuyn cho vng Heap

Qu trnh tr li b nh cho Heap-s thu gom rc 5

Vit phng thc hy


C php: du ng (~), theo sau l tn lp. V d:
class Tally{ public Tally(){ instanceCount++; } ~Tally(){ instanceCount--; } public static int InstanceCount(){ return instanceCount; } private static int instanceCount = 0; }
6

Vit phng thc hy

Ch :

Khng th khai bo phng thc hy cho 1 cu trc


struct Tally{ ~Tally(){......} // li bin dch }

Khng th khai bo mt b thay i truy cp (ton cc, cc b) cho 1 phng thc hy


public ~Tally(){......} // li bin dch

Phng thc hy khng c tham s


~Tally(int parameter){......} // li bin dch
7

Vit phng thc hy Ch :

Trnh bin dch s t ng chuyn mt phng thc hy thnh phng thc ghi ca phng thc Object.Finalize
class Tally{ ~Tally(){......} // li bin dch } class Tally{ protected override void Finalize(){ try{......} finally{ base.Finalize();} } }

Bn khng th ghi hay gi phng thc Finalize 8

Ti sao dng b thu gom rc


Cc nh thit k C# khng cho bn vit m lnh hy 1 i tng mt cch r rng v:
Bn s qun hy i tng ( ht b nh). Bn c hy 1 i tng ang c kch hot Bn c hy i tng nhiu ln.

B thu gom rc s chu trch nhim hy i tng cho bn:


Khi chng trnh kt thc th tt c cc i tng s b hy. Mi i tng ch b hy 1 ln. i tng b hy khi khng c tham chiu no khc tham chiu n n.
9

Gii phng cho lp trnh vin khi cng vic bun t, d gy li

Tp trung vo tnh logic ca chng trnh

Th nhng phi tr gi...

10

Hn ch
Bn khng bit trt t i tng s b hy. Cc i tng khng nht thit phi b hy theo th t ngc li nh khi chng c to. Bn khng bit khi no th b thu gom rc quyt nh hy i tng. Mt i tng cha chc b hy ngay khi n v ngha. Vic hy tiu tn thi gian, b thu gom rc ch hy i tng khi n thy cn thit (khi vng Heap b cn kit) hay khi bn gi phng thc System.GC.Collector
11

B thu gom rc thc thi nh th no?


B thu gom rc thc thi trong tin trnh ca n v ch thc thi khi cc tin trnh khc trong trng thi an ton. Cc bc n thc thi nh sau:
Xy dng mt th cc i tng v ngha Kim tra xem c i tng v ngha no yu cu hon tt khng(cha phng thc hy) Cc i tng v ngha cn li c phn b v tr Cho php cc tin trnh khc tip tc. Cc i tng v ngha c yu cu hon tt c hon tt trong 1 tin trnh ring bit.
12

Li khuyn:
Vit phng thc hy cho lp lm cho m lnh phc tp v chng trnh chy chm hn (do b thu gom rc phi thc hin bc 3 v bc 5 slide trc) trnh dng phng thc hy tr khi bn thc s cn n n. Nu vit phng thc hy, phi vit cn thn.
13

X l ngun ti nguyn
Ti nguyn khan him cn c gii phng v gii phng cng sm cng tt. Nu mt lp c mt phng thc disposal th bn c th gi n v c th iu khin ngun ti nguyn b gii phng.

14

S dng ngoi l an ton


S dng khi try...finally m bo rng phng thc disposal lun c gi:
TextReader reader = new StreamReader(filename); try{ string line; while((line = reader.ReadLine()) != null){ Console.WriteLine(line); } } finally{ reader.Close(); }
15

Cu lnh using
C php:
using(<kiu><bin>=<khi to>)cc cu lnh c nhng { <kiu><bin>=<khi to>; try{ //cc cu lnh c nhng } finally{ if(<bin>!= null){ ((IDisposable)<bin>).Disposal(); } } }
16

Cu lnh using

S tng ng trn y c ngha l, bin khai bo trong cu lnh using phi l mt kiu thc thi giao din IDisposal (trong khng gian tn System, cha duy nht phng thc Dispose).
namespace System{ interface IDisposable{ void Dispose(); } }
17

Phng thc openFileDialog_FileOK trong tp Form1.cs (Chapter 13):


private void openFileDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e) { string fullPathname = openFileDialog.FileName; FileInfo src = new FileInfo(fullPathname); filename.Text = src.Name; source.Text = ""; TextReader reader = new StreamReader(fullPathname); string line; while ((line = reader.ReadLine()) != null) { source.Text += line + "\n"; } reader.Close(); }

V d s dng using

18

V d s dng using

S dng using:

private void openFileDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e) { string fullPathname = openFileDialog.FileName; FileInfo src = new FileInfo(fullPathname); filename.Text = src.Name; source.Text = ""; using (TextReader reader = new StreamReader(fullPathname)) { string line; while ((line = reader.ReadLine()) != null) { source.Text += line + "\n"; } } } // reader.Close();
19

Ci t cc c tnh truy xut cc thuc tnh


Nguyn Hng Phng Khoa CNTT, HBKHN
1

Chng 14

Quan st cu trc biu din mt v tr ta


struct ScreenPosition{ public ScreenPosition(int x, int y){ X = rangeCheckedX(x); Y = rangeCheckedY(y); } public int X; public int Y; private static int rangeCheckedX(int x){ if(x<0 || x>640){ throw new ArgumentOutOfRangeException(X);} return x; } private static int rangeCheckedY(int y){ if(y<0 || y>800){ throw new ArgumentOutOfRangeException(Y);} return y; } }
2

Gii quyt vn

Cc trng nn l private Thm cc phng thc ly/t gi tr c v ghi gi tr cho mi trng


struct ScreenPosition{ ...... public int GetX(){ return x; } public void SetX(int newX){ x = rangeCheckedX(newX); } // tng t vi y private static int rangeCheckedX(int x){ ...... } private static int rangeCheckedY(int y){ ...... } private int x,y; }
3

Tn ti Nu dng cc phng thc th phi vit m lnh di hn l s dng cc trng. V d: tng gi tr ta X ln 10:
int x = topLeft.GetX(); topLeft.SetX(x+10);

M tng ng nu trng X l public:


topLeft.X += 10;

Tuy nhin, nu s dng trng th s ph v tnh ng ca n. Liu c cch no kt hp: gi li tnh ng trong khi vn cho php c php ging nh trng ? 4

Khi nim thuc tnh


S dng thuc tnh ging nh cch dng trng. V mt logic, mt thuc tnh ging nh mt trng. Trnh bin dch s t ng chuyn i c php ging trng ny vo lnh gi ti cc phng thc t gi tr c bit.
5

Khi nim thuc tnh

Cu trc ScreenPosition c vit li:


struct ScreenPosition{ public ScreenPosition(int X, int Y){ x = rangeCheckedX(X); y = rangeCheckedY(Y); } public int X{ get{ return x; } set{ x = rangeCheckedX(value);} } // tng t vi Y private static int rangeCheckedX(int x){......} private static int rangeCheckedY(int y){......} private int x,y; }
6

B ly gi tr get
S dng thuc tnh trong ng cnh c, trnh bin dch t ng chuyn i m ging nh trng ca bn thnh li gi ti b ly gi tr ca thuc tnh:
int x = topLeft.X;

int x = topLeft.X{ get{return x;}}


7

B thit lp gi tr set
S dng thuc tnh trong ng cnh ghi, trnh bin dch t ng chuyn i m ging nh trng ca bn thnh li gi ti b t gi tr ca thuc tnh:
topLeft.X = 40;

topLeft.X{ set{x = rangeCheckedX(40);}} thc s l: topLeft.x = rangeCheckedX(40);


8

Cc thuc tnh c/ghi


Dng thuc tnh trong c 2 ng cnh c/ghi. C 2 b get v set u c gi:
topLeft.X += 10;

int temp = topLeft.X.get{return x;} topLeft.X{ set{x = rangeCheckedX(temp+10);}}

Cc thuc tnh ch c
Bn c php khai bo mt thuc tnh ch cha mt b ly gi tr get. Khi , bn ch c th dng n trong ng cnh c.
struct ScreenPosition{ ...... public int X{ get{ return x; } } ...... private int x,y; }
10

Nu ta c gng t gi tr cho x th s gy ra li: topLeft.X = 40; // li bin dch

Cc thuc tnh ch ghi


Bn c php khai bo mt thuc tnh ch cha mt b thit lp gi tr set. Khi , bn ch c th dng n trong ng cnh ghi.
struct ScreenPosition{ ...... public int X{ set{ x = rangeCheckedX(value); } } ...... private int x,y; } Nu ta c gng ly gi tr x th s gy ra li: Console.WriteLine(topLeft.X); // li bin dch
11

Nhng hn ch ca thuc tnh


Khng th khi to gi tr cho thuc tnh bng b t gi tr:
ScreenPosition location; location.X = 40; // li

Khng th dng thuc tnh nh mt i s ref hay out (nhng trng th c th)
Method(ref topLeft.X); // li

Khng th khai bo nhiu thuc tnh trong 1 pht biu khai bo n:


public int X,Y{ get{...} set{...} } // li

Khng th khai bo cc thuc tnh const hay readonly


const int X{ get{...} set{...} } // li
12

Ch c khai bo get v/hoc set trong thuc tnh


public int X{ Console.WriteLine(Common Code); // li get{......} set{......} }

Nhng hn ch ca thuc tnh

Khng th khai bo mt thuc tnh c kiu public void X{ get{...} set{...} } // li void Khng th khai bo mt thuc tnh khng c tham s
public X{ get{...} set{...} } // li

Khng th khai bo mt thuc tnh vi nhiu tham s


public int,string X{ get{...} set{...} } // li
13

S dng thuc tnh tnh


struct ScreenPosition{ ...... public static ScreenPosition Limits{ get{ return limits;} } private static int rangeCheckedX(int x){ if(x<0 || x> limits.x){throw new ArgumentOutOfRangeException(X); } return x; } ...... private static ScreenPositon vgaLimits=new ScreenPosition(640,800); private static ScreenPosition limits = vgaLimits; private int x,y; }
14

Khai bo thuc tnh giao tip


C th khai bo thuc tnh trong 1 giao tip.
interface IScreenPosition{ int X{get; set;} int Y{get; set;} }

Bt k lp/cu trc ci t giao tip ny phi ci t cc b t/ly gi tr.


15

Ci t thuc tnh giao tip


Nu bn ci t cc thuc tnh giao tip trong 1 lp, bn c th khai bo ci t thuc tnh nh thuc tnh o, cho php cc lp dn xut sau ghi ln s ci t. V d:
class ScreenPosition: IScreenPosition{ ...... public virtual int X{ get{...} set{...} } public virtual int Y{ get{...} set{...} } private int x,y; }

T kha virtual khng hp l trong cu trc v khng th nhn cu trc dn xut t cu trc.

16

Ci t thuc tnh giao tip C th chn ci t thuc tnh giao tip mt cch tng minh
struct ScreenPosition: IScreenPosition{ ...... int IScreenPosition.X{ get{ return x; } set{ x = rangeCheckedX(value); } } int IScreenPosition.Y{ get{ return y; } set{ y = rangeCheckedY(value); } } ...... private int x,y; }
17

B ch mc
Nguyn Hng Phng Khoa CNTT, HBKHN
1

Chng 15

Khi nim b nh ch mc
B nh ch mc l 1 mng thng minh ging nh thuc tnh l 1 trng thng minh. C php dng cho b ch mc ging c php dng cho mng. Chng ta s xem xt vn khi khng s dng v c s dng b ch mc.
2

Gii php khng dng b ch mc


Kiu s nguyn int 32 bit. Mi bit c th l 0 hoc 1. i khi bn dng kiu int ch thao tc vi bit ! Mt s lp trnh vin dng 1 nh l gi tr ng, 0 l gi tr sai. V d: (bits & (1<<6))!=0
3

Gii php khng dng b ch mc

Mt s ton t thao tc bit:


o bit(~): ton t 1 ngi, v d: gi tr 8 bit 1111 1111 (thp phn l 255), o bit c gi tr 0000 0000 (thp phn l 0) Dch chuyn tri (<<), phi (>>) Or (|) And (&)

Gii php dng b ch mc


Chng ta mun dng kiu int nh l mng 32 bit. Nu bits l int, chng ta mun nhn c bit ch mc th 6:
bits[6]

xc lp bit ch mc th 6 thnh true: bits[6] = true; Chng ta khng th dng du ngoc vung trn kiu int. To ra 1 kiu mi ging nh mng bool, gi l IntBits.
5

Gii php dng b ch mc

IntBits cha 1 gi tr kiu int nhng c dng nh mng bool.


struct IntBits{ public IntBits(int initialBitValue){ bits = initialBitValue; } // B ch mc khai bo y private int bits; } public bool this[int index] { get{......} set{......} }

Lu :
Mt b ch mc khng phi l mt phng thc. Kiu ca b ch mc l bool i s gia du ng/m vung l int Tt c cc b ch mc dng t kha this v tr tn phng thc. Tt c b ch mc cha b ly v b t gi tr ging nh cc thuc tnh.
7

B ly gi tr
bool peek = bits[6]; bool lowBit = bits.this[6]{get{....}}// m gi

B t gi tr
bits[6] = true; bits.this[6]{set{....}}// m gi

c / ghi b ch mc
bits[6] ^= true; bits[6] = bits[6] ^ true;
8

B ch mc ch c
c php khai bo mt b ch mc ch c cha b ly gi tr:
struct IntBits{ ...... public bool this[int index] { get { return (bits & (1<<index))!=0; } } }
9

B ch mc ch ghi
c php khai bo mt b ch mc ch ghi cha b t gi tr:
struct IntBits{ ...... public bool this[int index] { set { if(value) bits != (1<<index); else bits &= ~(1<<index); } } }
10

So snh b ch mc v phng thc


Mt b ch mc tng t vi phng thc this dng du ngoc vung thay v du ngoc n. C vi s khc nhau:
Mt phng thc c th khng c tham s, b ch mc phi c t nht mt tham s. B ch mc phi cha hoc/v b t gi tr, b ly gi tr. Mt phng thc c th c kiu tr v l void, b ch mc th khng.

11

So snh b ch mc v mng
C php b ch mc ging mng. C vi s khc nhau:
B ch mc c th dng subscripts khng l s nguyn, cn mng th phi l s nguyn. Cc b ch mc c th np chng, mng th khng. B ch mc khng th c dng nh cc tham s kiu ref hay out, cc phn t ca mng th c th.
12

B ch mc giao tip
C th khai bo cc b ch mc trong mt giao tip: khai bo t kha get, set khng c phn thn. Bt k lp/cu trc ci t giao tip phi ci t truy xut b ch mc khai bo trong giao tip. V d:

13

B ch mc giao tip

V d:

interface IRawInt{ bool this[int index]{get;set;} } struct RawInt: IRawInt{ ...... public bool this[int index] { get{......} set{......} } }

14

Nu ci t b ch mc giao tip trong 1 lp, ta c th khai bo ci t b ch mc l o.


class RawInt: IRawInt{ ...... public virtual bool this[int index] { get{......} set{......} } }

15

C th chn ci t mt b ch mc dng c php ci t giao din tng minh:


struct RawInt: IRawInt{ ...... bool IRawInt.this[int index] { get{......} set{......} } }

16

y nhim hm v s kin
Nguyn Hng Phng Khoa CNTT, HBKHN
1

Chng 16

S dng khai bo y nhim hm v cc th hin


Mt y nhim hm l mt kiu trng v hnh x nh 1 phng thc. y nhim hm l 1 s tru tng ca 1 phng thc. Ta c th coi n l 1 phng thc thng minh.

V d khng dng y nhim hm


Vit 1 chng trnh c mi giy thc hin 1 tc v
class Ticker{ public void Attach(Subscriber newSub){subscribers.Add(newSub);} public void Detach(Subscriber newSub){subscribers.Remove(newSub);} private void Notify(){ foreach(Subscriber s in subscribers){s.Tick();} } ...... private ArrayList subscribers = new ArrayList(); }
3

V d khng dng y nhim hm


class Subscriber{ public void Tick(){......} } class ExampleUse{ static void Main(){ Ticker pulsed = new Ticker(); Subscriber worker = new Subscriber(); pulsed.Attach(worker); ....... } }
4

Nng cp
interface Tickable{ void Tick(); } class Ticker{ public void Attach(Subscriber newSub){subscribers.Add(newSub);} public void Detach(Subscriber newSub){subscribers.Remove(newSub);} private void Notify(){ foreach(Tickable t in subscribers){ t.Tick(); } } ...... private ArrayList subscribers = new ArrayList(); }

Nng cp
class Clock: Tickable{ ...... public void Tick(){......} } class ExampleUse{ static void Main(){ Ticker pulsed = new Ticker(); Clock wall = new Clock(); pulsed.Attach(wall); ....... } }

V d dng y nhim hm
Khai bo 1 y nhim hm
C th khai bo 1 y nhim hm ph hp vi ch k ca phng thc Tick() trn:
delegate void Tick();

V d ny khai bo 1 kiu mi: Tick l tn kiu. C th dng tn kiu khai bo trong 1 trng hay 1 tham s:
void Example(Tick param){......}

Kiu y nhim hm hon ton c nhn t lp System.Delegate. Kiu y nhim hm c th cha phng thc, ton t, thuc tnh nn bn c th truyn chng nh l tham s ti cc phng thc khc.
7

Gi mt y nhim hm
V d trc: void Example(Tick param){......}

Nu param l s int th ta c th s dng gi tr ca n v p dng cc php ton +,-,+=,... Tuy nhin y, param l 1 y nhim hm. Ta dng y nhim hm nh l 1 phng thc, gi y nhim hm bng cc du ngoc:
void Example(Tick param){ param(); }
8

Gi mt y nhim hm
Mt y nhim hm l 1 kiu tham chiu nn n c th l null. Nu param l null trong v d trn th trnh bin dch s a ra thng bo NullReferenceException Phi gi y nhim hm 1 cch chnh xc. Trong v d ny, param c kiu l Tick, v Tick c khai bo nh sau:
delegate void Tick();
9

Gi mt y nhim hm
Vic khai bo ny cho bit khi gi 1 y nhim hm Tick (vd: param), ta khng c php truyn bt k i s no v li gi khng tr v iu g:
void Example(Tick param){ param(42); // li bin dch int result = param(); // li bin dch Console.WriteLine(param()); // li bin dch }

C th khai bo 1 y nhim hm vi bt k ch k no bn mun.


delegate void Tick(int hh, int mm, int ss);
10

Gi mt y nhim hm
Dng y nhim hm c tham s:
void Example(Tick method){ method(12, 29, 50); }

11

To 1 th hin ca 1 y nhim hm
Dng c php nh vi lp hay cu trc: vit t kha new, theo sau l tn kiu(tn y nhim hm), v theo sau l tn i s trong du ngoc. i s phi l phng thc c ch k ph hp chnh xc vi ch k ca y nhim hm. V d:
class Example{ private void Method(){......} ...... private void Create(){ Tick m = new Tick(this.Method); } }
12

Khai bo 1 s kin
Vit t kha event, theo sau l tn ca kiu (kiu ny phi l 1 kiu y nhim hm) v sau na l tn ca s kin. V d:
delegate void TickHandler(); class Ticker{ public event TickHandler Tick; }

13

Gn 1 y nhim hm vi 1 s kin To 1 th hin y nhim hm (cng kiu nh s kin) v nh km th hin y nhim hm ny ti s kin dng ton t +=. V d:
class Clock{ ...... public void Start(){ ticker.Tick += new TickHandler(this.RefreshTime); } private void RefreshTime(){......} private Ticker ticker = new Ticker(); }
14

Tch 1 y nhim hm ra khi 1 s kin


To 1 th hin y nhim hm cng kiu nh s kin v tch th hin y nhim hm ny ra khi s kin dng ton t -=. V d:
class Clock{ ...... public void Stop(){ ticker.Tick -= new TickHandler(this.RefreshTime); } private void RefreshTime(){......} private Ticker ticker = new Ticker(); }
15

Ci t 1 s kin
Dng du ngoc chnh xc nh s kin l 1 phng thc, cung cp i s ph hp kiu. Nh kim tra s kin c l null hay khng. V d:
class Ticker{ public event TickHandler Tick; ...... private void Raise(){ if(Tick != null){ Tick(); } } }
16

Ton t np chng
Nguyn Hng Phng Khoa CNTT, HBKHN
1

Chng 17

Lm vic vi cc ton t
Bn dng cc k hiu ton t chun (vd: +, -) thc thi cc thao tc chun (vd: cng, tr) trn cc kiu (vd: int, double) Cc kiu s c xy dng sn i cng vi cc hnh v c nh ngha trc ca chng cho mi ton t nhng cc kiu nh ngha ngi dng th khng. C# cho php cc kiu nh ngha ngi dng thc thi hnh vi quen thuc.
2

Ton t
Mi k hiu ton t c 1 quyn u tin. Vd: * c quyn cao hn + S kt hp t tri qua phi hay t phi qua tri. Ton t 1 ngi l ton t ch c 1 ton hng,vd: ++ Ton t 2 ngi l ton t c 2 ton hng, vd: *
3

Thc thi cc rng buc ton t


C# cho php bn thc thi hu ht cc k hiu ton t ang tn ti cho cc kiu ca chnh bn Cc quy tc:
Khng th thay i u tin v s kt hp ca 1 ton t. VD: a+b*c th lun l a+(b*c). Khng th thay th s ton hng ca 1 ton t.VD: Ton t * lun l 2 ngi. Khng th pht minh ra k hiu ton t mi. VD: php ** cho ly tha!!! Khng th thay i ngha ca cc ton t khi p dng cho nhng kiu c sn. C vi k hiu ton t m bn khng th np chng.VD: ton t chm (truy cp thnh phn)

Cc ton t np chng
nh ngha hnh vi ton t ca chnh bn, bn phi np chng 1 ton t c chn. Bn dng c php nh phng thc vi kiu tr v cc tham s nhng tn ca phng thc l t kha operator cng k hiu ton t bn ang khai bo. V d: cu trc Hour nh ngha ton t 2 ngi cng 2 th hin ca Hour li:

Cc ton t np chng
struct Hour{ public Hour(int initialValue){ value = initialValue; } public static Hour operator+(Hour lhs, Hour rhs){ return new Hour(lhs.value + rhs.value); } private int value; } Tt c cc ton t l ton cc Ton t l tnh. Cc ton t khng bao gi l a hnh, v vy chng khng th dng o, tru tng, ghi , nim phong. Ton t khng bao gi c 1 tham s n this nh trong C++
6

To cc ton t i xng
void Indirect(Hour a, int b){ Hour sum = a+new Hour(b); } struct Hour{ public Hour(int initialValue){ value = initialValue; } public static Hour operator+(Hour lhs, Hour rhs){ return new Hour(lhs.value + rhs.value); } public static Hour operator+(Hour lhs, int rhs){ return lhs + new Hour(rhs); } public static Hour operator+(int lhs, Hour rhs){ return new Hour(lhs + rhs.value); } private int value; }
7

void Direct(Hour a, int b){ Hour sum = a+b; }

Tm hiu php gn kt hp
C# khng cho php khai bo bt k ton t gn nh ngha ngi dng. Tuy nhin, mt ton t gn kt hp (vd: +=) lun c thc thi: a+=b lun c thc thi a=a+b.
void Example(Hour a, int b){ a+=a; // tng t a=a+a a+=b; // tng t a=a+b b+=a; //khng hp l }
8

Khai bo cc ton t tng gim


C# cho php khai bo phin bn ca cc ton t tng(++) v gim(--) ca chnh bn.
struct Hour{ ...... public static Hour operator++(Hour arg){ arg.value++; return arg; } }
9

Cc ton t tng gim


Hour now = new Hour(9); Hour postfix = now++; Hour now = new Hour(9); Hour prefix = ++now;

Hour now = new Hour(9); Hour postfix = now; now = Hour.operator++(now);

Hour now = new Hour(9); now = Hour.operator++(now); Hour postfix = now;

10

S dng ton t i
Nu khai bo phi khai bo != v == theo cp. Quy tc ny khng p dng cho <,>, <=,>=.
struct Hour{ public Hour(int initialValue){......} public static bool operator==(Hour lhs, Hour rhs){ return lhs.value==rhs.value; } public static bool operator!=(Hour lhs, Hour rhs){ return lhs.value!=rhs.value; } private int value; }
11

Cu trc v lp
Vic thc thi ton t tng trong cu trc Hour l chnh xc, nhng nu i Hour thnh lp th khng cn chnh xc na.

12

Khai bo cc ton t chuyn i kiu Gi tr ca 1 kiu c chuyn sang gi tr ca 1 kiu khc.


class Example{ public static void Method(double param){......} } Example.Method(42);// chuyn int sang double

Khng chuyn t double sang int. Mun chuyn phi p kiu


13

Ton t chuyn i nh ngha ngi dng


C php: ton t chuyn i l ton cc v tnh
struct Hour{ public static implicit operator int(Hour from){ return from.value; } private int value; }

Ton t chuyn i khng tng minh (implicit) hay tng minh (explicit). Nu ton t chuyn i l tng minh th n yu cu s p kiu tng minh.
14

Windows Forms
Nguyn Hng Phng Khoa CNTT, HBKHN

Chng 18

Gii thiu Mt form n gin l lp k tha t System.Windows.Forms.Form. M ngun cha cc phng thc: Main, Dispose, phng thc khi to,... Phng thc Main l im vo ca ng dng. Phng thc Dispose gii phng cc ti nguyn m form gi.
2

Cc thuc tnh chung ca Windows Forms


Thuc tnh (Name) BackColor BackgroundI mage Font M t Tn form. hai form trong cng d n khng c trng tn. Mu nn ca vn bn hay hnh nh trn form Hnh nn ca form. Nu nh hn form, n s c lm y form Font dng cho cc thnh phn nhng trn form, hin th vn bn. N bao gm: tn, kch thc, nghing,... Mu ni bt ca vn bn hay hnh nh trn form

ForeColor

Cc thuc tnh chung ca Windows Forms

Thuc tnh FormBorderSt yle Icon MaximizeBox MaximumSize

M t Din mo v kiu ng vin form. Mc nh l Sizable Icon xut hin trn thanh tc v Lnh maximize trn trnh n hay thanh tiu c tc dng? Kch thc ln nht ca form. Mc nh (0,0) ch ra rng khng c kch thc ln nht v user c th thay i kch thc ca form i ngu MaximizeBox i ngu vi MaximumBox
4

MinimizeBox MinimumSize

Cc thuc tnh chung ca Windows Forms

Thuc tnh Size Text WindowState ControlBox

M t Kch thc ca form khi ln u hin th Vn bn xut hin trn thanh tiu Trng thi khi u ca form khi n xut hin ln u G b trnh n h thng khi thanh tiu khi n = False

Opacity

trong sut ca form


5

Thay i thuc tnh thi gian chy C th vit m chng trnh thay i ng cc thuc tnh thi gian chy. V d: thay i kch thc form. Thc hin v d BellRingers chng 18.

To ng dng Windows Forms


To ng dng Middleshire Bell Ringers Association bng cch to mt d n mi, thit k giao din, thm cc thnh phn iu khin ln form. Cc bc tin hnh:
Khi ng VS.NET T trnh n File, chn New, chn Project Trong khung Project Types, chn Visual C# Projects Trong khung Templates, chn Windows Application Nhp vo hp Name tn BellRingers nh v d n dng Location.
7

To ng dng Windows Forms

Bm OK, mt d n mi c to ra, cha mt form trng c tn l Form1

Thit lp cc thuc tnh ca form:


Hin th ca s Properties t trnh n view Dng thuc tnh Name, i tn form thnh MemberForm Chn thuc tnh Text, nhp Middleshire Bell Ringers Association Members thay i tiu form Chn thuc tnh BackgroundImage, bm nt tnh lc (...) m hp thoi, chn file nh Bell.gif
8

To ng dng Windows Forms

Chn thuc tnh BackColor, nhn mi tn xung, chn th System, bm chn Windows thit lp mu nn cho tt c thnh phn iu khin th trn form. Chn thuc tnh a hp Font, thit lp Size ca font l 12, thuc tnh Bold l True. Thay i thuc tnh a hp Size: thuc tnh Width l 600, Height l 450
9

To ng dng Windows Forms

Bin dch th, thy c li v ta thay i tn form thnh MemberForm Sa cha:


Hin th m ngun Form1.cs bng cch n F7. Tm phng thc Main, sa li on m thnh: Application.Run(new MemberForm());

To dng v chy li ng dng thnh cng.


10

To ng dng Windows Forms

Thm cc thnh phn iu khin ln form:

11

Thit lp gi tr cho cc thuc tnh ca cc iu khin


iu khin
label1 textBox1

Thuc tnh
Text Location (Name) Location Size Text Text Location (Name) Location Size Text

Gi tr
First Name 10, 20 firstName 120, 20 170, 26 trng Last Name 300, 20 lastName 400, 20 170, 26 trng
12

label2 textBox2

Thit lp gi tr cho cc thuc tnh ca cc iu khin

iu khin
label3 comboBox1

Thuc tnh
Text Location (Name) DropDownStyle Location Size (Name) Location Size Text CheckAlign Text Location Size

Gi tr
Tower 10, 72 tower DropDownList 120, 72 260, 28 captain 400, 72 100, 26 Captain MiddleLeft Member Since 10, 128 120, 23

checkBox1

label4

13

Thit lp gi tr cho cc thuc tnh ca cc iu khin

iu khin
DateTimePicker

Thuc tnh
(Name) Location Size (Name) Location Size Text (Name) Location Size Text (Name) Location Size Text

Gi tr
memberSince 140, 128 200, 26 experience 10, 184 260, 160 Experience novice 16, 32 220, 24 Up to 1 year intermediate 16, 64 220, 24 1 to 4 years

groupBox1

radioButton1

radioButton2

14

Thit lp gi tr cho cc thuc tnh ca cc iu khin

iu khin
radioButton3

Thuc tnh
(Name) Location Size Text (Name) Location Size Text (Name) Location Size Sorted

Gi tr
experienced 16, 96 220, 24 5 to 9 years accomplished 16, 128 220, 24 10 or more years methods 300, 192 270, 160 True
15

radioButton4

checkedListBox1

Thit lp gi tr cho cc thuc tnh ca cc iu khin

iu khin
button1

Thuc tnh
(Name) Location Size Text (Name) Location Size Text

Gi tr
add 190, 368 75, 40 Add clear 335, 368 75, 40 Clear

button2

16

Thay i thuc tnh bng m lnh


Bn hc cch thit lp gi tr cc thuc tnh lc design. Bn cng c th thit lp v ly gi tr thuc tnh bng m chng trnh, v c bit, c 1 s thuc tnh ch c th thit lp thi gian chy. Chng ta tip tc thc hnh v d trn bng cch to phng thc Reset:
T trnh n View, bm chn Class View Trong ca s Class View, m rng d n BellRingers, bm phi chut ln lp MemberForm
17

Thay i thuc tnh bng m lnh

Tr chut n Add, chn Add Method Nhp Reset vo hp Method name, bm Finish Trong ca s son tho, thm dng m:
firstName.Text = ; lastName.Text = ;

a d liu vo ComboBox:
thm cc pht biu sau:
tower.Items.Clear(); tower.Items.Add(Great Shevington); tower.Items.Add(Little Mudford); tower.Items.Add(Upper Gumtree); tower.Items.Add(Downley Hatch);

18

Thay i thuc tnh bng m lnh

Thit lp ngy hin thi: khi to thnh phn DateTimePicker memberSince ti ngy hin thi
memberSince.Value = DateTime.Today;

Khi to CheckBox: CheckBox captain mc nh l False


captain.Checked = false;

Khi to nhm nt radio: sc mnh ca radio tng ln khi bn t chng vo trong GroupBox. Thm dng sau:
novice.Checked = true;
19

Thay i thuc tnh bng m lnh

in gi tr vo ListBox: hon tt phng thc Reset vi cc dng:


methods.Items.Clear(); methods.ITems.Add(Andover Bob Minor); methods.ITems.Add(Antelope Place Doubles); methods.ITems.Add(Hayfield Royal); methods.ITems.Add(West Chiltington Doubles); methods.ITems.Add(Brandon Parva Maximus); methods.ITems.Add(Buckfast Abbey Triples); methods.ITems.Add(Skelwith Bridge Minor); methods.ITems.Add(Acton Trussel Bob Royal);
20

Gi phng thc Reset

t Reset() ti y

21

X l s kin trong Windows Forms X l s kin cho nt Clear:


ch Design View, chn nt Clear trn form. Trong ca s Properties, chn Events. Chn s kin Click. Nhp clearClicked vo v nhn Enter. Vit m:
private void clearClicked(object sender, System.EventArgs e) { Reset(); }
22

X l s kin trong Windows Forms


X l s kin cho nt Add:
ch Design View, chn nt Add. Trong ca s Properties, chn Events. Chn s kin Click. Nhp addClicked vo v nhn Enter. Vit m:

private void addClick(object sender, System.EventArgs e) { string details; details = "Member name " + firstName.Text + " " + lastName.Text + " from the tower at " + tower.Text; MessageBox.Show(details, "Member Information"); 23 }

S kin Closing ca form


c pht sinh khi user c ng form trc khi form thc s c ng li. C th dng s kin ny nhc user lu d liu hoc hi h c chc chn khng. Thc hnh:
Tr v ch Design View, chn form Chn Events, nhp memberFormClosing trong s kin Closing ri nhn Enter
24

S kin Closing ca form


Thm lnh sau vo:
private void memberFormClosing(object sender, System.ComponentModel.CancelEventArgs e) { DialogResult key = MessageBox.Show("Are you sure you want to quit", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question); e.Cancel = (key == DialogResult.No); }
25

Trnh n
Nguyn Hng Phng Khoa CNTT, HBKHN

Chng 19

Trnh n v kiu trnh n


Mc u tin l trnh n File, thng c cc lnh: to mi, m ti liu, lu ti liu, in ti liu, thot ng dng. Trnh n Edit c: Cut, Paste, Clear, Find,... Trnh n Help cui cng cha lnh gip v thng tin about Tham kho hng dn trn web
2

To v x l cc s kin trnh n
C 2 cch to trnh n:
Hng ha: dng mi trng IDE Vit m lnh: to i tng MainMenu, sau thm i tng MenuItem

Thc hnh to trnh n theo hng tip cn ha cho ng dng Middleshire Bell Ringers Association trong chng 18.
3

To trnh n File M d n BellRingers Hin th MemberForm trong ca s Design View. Ko th thnh phn MainMenu t Toolbox ln form. Bm chn nhn Type Here, nhp vo &File ri nhn Enter. Tip tc thm &New, &Open, &Save Member, du gch ngang, &Print, du gch ngang, E&xit
4

To trnh n File

Thit lp cc thuc tnh ca mc trnh n

Bm chn thnh phn iu khin mainMenu1 bn di form. trong ca s Properties, thay i tn thnh mainMenu. Bm chut phi ln mc trnh n File trn thanh trnh n ca form, chn Edit Names.

Thit lp cc thuc tnh ca mc trnh n Bm chn mc menuItem1, nhp fileItem, nhn Enter. i tn cc mc trnh n cn li: Mc [menuItem2] [menuItem3] [menuItem4] [menuItem6] [menuItem8] Tn mi newItem openItem saveItem printItem exitItem

Khi hon tt, bm phi chut ln trnh n filemenu, b chn dng lnh Edit Names 7

Thit lp cc thuc tnh ca mc trnh n Thm phm tt vo mt mc trnh n bng ca s Properties:


Chn mc trnh n Save Member trong trnh n File trn form. Bm chn Shortcut trong ca s Properties. Chn CtrlS. Chn thuc tnh ShowShortcut bn di, t n l true.(phm tt c hin th) Lm tng t vi cc mc khc: NewItem(CtrlN), openItem(CtrlO), printItem(CtrlP), exitItem(AltF4).

Nu mun mc no khng th chn, thit lp thuc tnh Enabled trong ca s Properties l False. V d menuPrint khng th chn nu cha c d liu.

Cc thuc tnh ca mc trnh n


Thuc tnh
(Name) Checked DefaultItem Enabled RadioCheck Shortcut ShowShortcut Text Visible

M t
Tn ca mc trnh n Cc mc hnh ng nh hp kim v hin ra du kim khi c chn. Gi tr True/False Mc trnh n l mc nh hay khng Mc trnh n r hay m i Lin kt vi thuc tnh Checked Phm tt Hin th phm tt nu l True Dng vn bn hin th Mt mc c hin th hay khng
9

Cc s kin trnh n
C 5 s kin trnh n khc nhau khi user truy xut ti mt mc trnh n: S kin
Click DrawItem

M t
Xy ra khi user bm ln mc trnh n Xy ra khi mc trnh n c v li

MeasureItem Xy ra khi trnh thc thi ang quyt nh cao ca mc trnh n. Popup Select Xy ra khi trnh n c hin th Xy ra khi user chn mc trnh n
10

X l cc s kin mc trnh n
S kin bm chn mc New trn File:
Bm chn File v chn New Trong ca s Properties, nhn Events, chn s kin Click, nhp newClick, n Enter Mt phng thc s kin mi ra i, nhp vo on m dng lnh: Reset();

Enabled ca Print thnh True:


printItem.Enabled = true;

Phng thc s kin Click cho Exit:


nhp vo Close();
11

p buc tt c cc form ng li: Application.Exit();

12

Trnh n Popup
To trnh n Popup:
To 1 trnh n Popup gn vo 2 textbox firstName v lastName cho php user xa cc thnh phn ny. To 1 trnh n Popup gn vo form v cha cc lnh lu thng tin ca thnh vin hin thi v xa form.

13

To trnh n Popup
Trong ca s Design View ang hin th MemberForm, ko th iu khin ContextMenu vo form Chn thnh phn iu khin contextMenu1, i tn (Name) thnh textBoxMenu Bm chn vn bn Context Menu, nhn Type Here xut hin. Bm chn Type Here, nhp vo Clear Text, n Enter. Chn thnh phn iu khin Clear Text, nhp textBoxClearItem trong hp Name ca ca s Properties ri nhn Enter.
14

To trnh n Popup
Bm chn hp vn bn firstName, i thuc tnh ContextMenu thnh textBoxMenu. Tng t vi hp vn bn lastName. Nhp phi chut ln thnh phn textBoxMenu cui form, chn Edit Menu. Mt trnh n xut hin bn di nhn Context Menu T trnh n, chn Clear Text Trong ca s Properties, chn Events, nhp textBoxClearClick vo hp vn bn s kin Click ri nhn Enter
15

To trnh n Popup
Thm pht biu sau vo phng thc s kin:
private void textBoxClearClick(object sender, System.EventArgs e) { if (textBoxMenu.SourceControl.Equals(firstName)) { firstName.Clear(); } else { lastName.Clear(); } Nu thuc tnh SourceControl ca }
trnh n Popup tham chiu ti hp vn bn firstName th firstName.Clear() s lm rng n

16

To trnh n Popup ng s dng m chng trnh


Chuyn qua Code View ca MemberForm, xc nh phng thc khi dng cho MemberForm. Trnh n Popup ny s cha 2 mc l Save member v Clear. Thm dng sau vo di Reset() trong phng thc khi dng:

17

To trnh n Popup ng s dng m chng trnh


MenuItem[] formMenuItemList = new MenuItem[2]; formMenuItemList[0] = saveItem.CloneMenu(); MenuItem clearItem = new MenuItem("&Clear", new System.EventHandler(clearClicked)); formMenuItemList[1] = clearItem; ContextMenu formMenu = new ContextMenu(formMenuItemList); this.ContextMenu = formMenu;

18

Thc thi hiu lc


Nguyn Hng Phng Khoa CNTT, HBKHN
1

Chng 20

Hiu lc d liu
Thuc tnh Cause Validation: u c cc iu khin v form. Mc nh l True. Nu l true, th khi iu khin nhn focus v iu khin trc mt focus s c hiu lc. Nu hiu lc ny tht bi th focus s tr li iu khin trc. Nhn xt: thuc tnh Cause Validation khng p dng i vi bn thn iu khin nhng c tc dng vi tt c cc iu khin khc trn form
2

Cc s kin hiu lc
hiu lc d liu trong mt iu khin, bn phi s dng 2 s kin: Validating v Validated. S kin Validating xut hin khi focus ra khi 1 iu khin v c nhy qua 1 iu khin c thuc tnh CauseValidation l true. Dng s kin ny kim tra gi tr ca 1 iu khin ang mt focus. S kin Validated xut hin sau s kin Validating(nu n khng b hy b) nhng trc khi iu khin mt focus. Bn khng th hy b s kin ny.
3

Thc hnh

Tc v: Mr, Mrs, Miss, Ms

Cc bc
M d n CustomerDetails trong chng 20. Nhp p vo CustomerForm.cs hin th form trong vng thit k. Nhp cc gi tr tc v vo mc ITems ca hp comboBox Title. Quy tc: Tc v l Mr th gii tnh l Male, ngc li l Female.
5

Phng thc titleValidating v genderValidating


y l nhng s thc thi ca b x l s kin Validating cho hp danh sch Title v nhm Gender. C hai u gi n phng thc checkTitleAndGender v thit lp thuc tnh Cancel ca tham s CancelEventArgs l false nu n tr v false.
6

Phng thc titleValidating v genderValidating


private void titleValidating(object sender, System.ComponentModel.CancelEventArgs e) { if (!checkTitleAndGender()) { e.Cancel = true; } } private void genderValidating(object sender, System.ComponentModel.CancelEventArgs e) { if (!checkTitleAndGender()) { e.Cancel = true; } }

Phng thc checkTitleAndGender


private bool checkTitleAndGender(){ if (title.Text == "Mr"){ if (!male.Checked){ MessageBox.Show("If the title is Mr the gender must be male", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } }else{ if (!female.Checked){ MessageBox.Show("If the title is Mrs, Miss, or Ms the gender must be female", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } } return true;
8

Chy ng dng

Chy ng dng
Chn Title l Mrs, Gender vn l Male, ta s nhn c thng bo li:

10

Chy ng dng
Nhp OK trn hp thng bo, sau c nhp vo nt radio Female, bn s tht bi v thuc tnh CauseValidation ca nhm Gender lm cho s kin Validating thc thi.

11

S dng iu khin ErrorProvider


Duy tr hiu lc l tt nhng nu c qu nhiu hp thng bo li s lm user mt mi. VS.NET cung cp iu khin ErrorProvider

12

Thm iu khin ErrorProvider


Hin th form CustomerForm. Ko th iu khin ErrorProvider t toolBox vo form. Nhp vo iu khin errorProvider1, trn ca s thuc tnh, i tn thnh errorProvider, xc nh thuc tnh BlinkStyle l BlinkIfDifferentError( nu mun lc no cng nhp nhy th chn AlwaysBlink). Biu tng li: thuc tnh Icon; tc nhy: BlinkRate;
13

Thm iu khin ErrorProvider


Trn form, chn hp danh sch Title. Nhn vo ca s thuc tnh, bn thy c 1 thuc tnh mi: Error on errorProvider. G thng bo li y th n s lun hin th. Vit m lnh: xc nh phng thc checkTitleAndGender, thay th cu lnh gi phng thc MessageBox.Show bng cc cu lnh sau ca phng thc errorProvider.SetError. Phng thc ny xc nh iu khin nh du vi biu tng li v thng bo.
14

Thm iu khin ErrorProvider


public bool checkTitleAndGender(){ if (title.Text == "Mr"){ if (!male.Checked) { errorProvider.SetError(gender, "If the title is Mr the gender must be male"); errorProvider.SetError(title, "If the gender must be female the title must be Mrs, Miss, or Ms"); return false; }}else{ if (!female.Checked){ errorProvider.SetError(gender, "If the title is Mrs, Miss, or Ms the gender must be female"); errorProvider.SetError(title, "If the gender is male the title must be Mr"); return false; }} errorProvider.SetError(gender, ""); errorProvider.SetError(title, ""); return true; 15 }

Chy ng dng

16

S dng c s d liu
Nguyn Hng Phng Khoa CNTT, HBKHN
1

Chng 24

S dng ADO.NET ADO (ActiveX Data Object) pht trin ln thnh ADO.NET Trong ADO.NET, khi nim RecordSet khng cn tn ti, thay vo c cc lp DataAdapter v DataSet Trong phn u ny, chng ta s s dng CSDL Northwind c sn trong SQL Server 2000 minh ha.
2

CSDL Northwind

Bng Orders trong Northwind

Bng Orders

Security - Login

10

Trong ca s Server Explorer, m rng DataConnections, m rng Tables, mt danh sch cc bng trong CSDL xut hin. M rng bng Products, xut hin cc ct ca n.
11

Nhp chut phi ln bng Products v chn Retrieve Data From Table

12

Trong ca s Solution Explorer, nhp phi chut ln Solution ListProduct->Add New Project

13

Ko th bng Products vo form

14

15

M rng DeleteCommand, chn Command Text

16

bn di ca s Properties, c ba nhn:

17

Nhp vo Generate Dataset

18

Th DataGrid vo form, thit lp thuc tnh Dock l Fill Thit lp Data Source l dataSet11.Products G cu lnh sau di ch thch TODO trong phng thc khi dng:
sqlDataAdapter1.Fill(dataSet11);

Chy th ng dng

19

S dng ADO.NET bng m lnh


To 1 da n mi c tn l ReportsOrders i tn file Class1.cs thnh Report.cs, tn lp Class1 thnh Report Trong ca s son tho m lnh, g vo nh sau:

20

using System; using System.Data.SqlClient; namespace ReportOrders { /// <summary> /// Summary description for Class1. /// </summary> class Report { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] args) { // // TODO: Add code to start application here //
21

M lnh
try { SqlConnection();

// ma lenh o day SqlConnection dataConnection = new

dataConnection.ConnectionString = "User ID=phuongnh;Password=123456;Initial Catalog=Northwind;Data Source=IT-6B9EEA88D491"; dataConnection.Open(); Console.WriteLine("ID 6 ki tu"); string c=Console.ReadLine(); int cid = Int32.Parse(c); SqlCommand dataCommand = new SqlCommand();

22

M lnh
dataConnection; dataCommand.Connection = dataCommand.CommandText =

"Select OrderID,OrderDate,ShippedDate,ShipName,ShipAddress,ShipCi ty,ShipCountry "; dataCommand.CommandText += "From Orders Where OrderID='"+ cid +"'"; Console.WriteLine(dataCommand.CommandText); SqlDataReader dataReader = dataCommand.ExecuteReader(); while(dataReader.Read()) {

23

int orderid = dataReader.GetInt32(0); DateTime orderDate = dataReader.GetDateTime(1); DateTime shipDate = dataReader.GetDateTime(2); string shipName = dataReader.GetString(3); string shipAddress = dataReader.GetString(4); string shipCity = dataReader.GetString(5); string shipCountry = dataReader.GetString(6); Console.WriteLine("{0} {1} {2} {3} {4} {5} {6}",orderid,orderDate,shipDate,shipName,shipAddress,shipCit y,shipCountry); } // ket thuc while dataReader.Close(); dataConnection.Close(); } catch(Exception e) { Console.WriteLine("Loi "+e.Message+e.ToString()); } } } }
24

Chy th ng dng

25

Kt ni vi Access
To 1 file access db1.mdb c 1 bng tn l tb1 nm trn C

26

Bng tb1:

27

on m chng trnh:
using System; using System.Data.OleDb; namespace OleDbTest { /// <summary> /// Summary description for Class1. /// </summary> class Class1 { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] args) { // // TODO: Add code to start application here //

28

try

OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\db1.mdb"); OleDbCommand aCommand = new OleDbCommand("select * from tb1", aConnection); aConnection.Open(); OleDbDataReader aReader = aCommand.ExecuteReader(); Console.WriteLine("This is the returned data from emp_test table"); while(aReader.Read()) { Console.WriteLine("{0} {1}",aReader.GetInt32(0).ToString(),aReader.GetString(1)); }

29

aReader.Close();

} catch(Exception e) { Console.WriteLine(e.ToString()); }

aConnection.Close();

30

Kt qu

31

Cc trang nn tham kho


http://www.csharphelp.com/archives /archive70.html http://www.connectionstrings.com/? carrier=access

32

You might also like