You are on page 1of 34

Lp trnh hng i tng C#

Bi 3

Yu cu

nh ngha lp v to c cc th hin ca lp (i tng). Khai bo v s dng cc phng thc trong lp, cch np chng phng thc. Truyn tham s, cc t kha ref, out v params. C ch y quyn v s kin (delegate - event).

nh ngha lp
nh ngha mt kiu d liu mi hay mt lp u tin phi khai bo ri sau mi nh ngha cc thuc tnh v phng thc ca kiu d liu . [b sung truy cp] class <nh danh lp>[:Lp c s] { <phn thn ca lp bao gm nh ngha cc thuc tnh v phng thc hnh ng> }

B sung truy cp
B sung truy cp public private protected internal protected internal Gii hn truy cp Khng hn ch. Ch c truy cp bi cc phng thc trong cng mt lp. Truy cp bi cc phng thc trong lp A v nhng lp dn xut t A Truy cp bi nhng phng thc ca bt c lp no trong khi hp ng ca A Truy cp bi cc phng thc ca lp A, dn xut t A v cc lp nm cng trong khi hp ng vi A.

nh danh lp

nh danh lp l tn ca lp do ngi xy dng chng trnh to ra c vit theo ng quy c chun. Lp c s l lp m i tng s k tha. Tt c cc thnh vin ca lp c nh ngha trong thn ca lp, c bao bc bi hai du ({})

V d minh ha
To mt lp thi gian, hin th thi gian trong ngy. using System; public class ThoiGian { private int Nam; private int Thang; private int Ngay; private int Gio; private int Phut; private int Giay;

V d minh ha
public void ThoiGianHienHanh() { Console.WriteLine(Hien thi thoi gian hien hanh); } } public class Tester { static void Main() { ThoiGian t = new ThoiGian(); t.ThoiGianHienHanh(); } }

Tham s ca phng thc


Mt phng thc c th ly bt k s lng tham s no. Mi tham s phi khai bo km vi kiu d liu void Method(int p1, string p2) { //thn ca phng thc }

To i tng
S dng t kha new to mt i tng ThoiGian t= new ThoiGian(); Cc i tng l kiu d liu tham chiu v c to ra trn heap >< kiu d liu gi tr c to ra trn stack

B khi dng

Mt phng thc khi dng (constructor) s c gi thc hin khi ta to mt i tng. Chc nng ca n l to cc i tng c xc nh bi mt lp v t trng thi ny hp l. Nu khng to b khi dng th CLR s t ng to b khi dng mc nh, cc thnh vin c khi to gi tr tm thng (int, long, byte 0) Khai bo b khi dng l khai bo mt phng thc c tn trng vi tn lp.

B khi dng
public ThoiGian( System.DateTime dt ) { Nam = dt.Year; Thang = dt.Month; Ngay = dt.Day; Gio = dt.Hour; Phut = dt.Minute; Giay = dt.Second; }

B khi dng
public class Tester { static void Main() { System.DateTime currentTime = System.DateTime.Now; ThoiGian t = new ThoiGian( currentTime ); t.ThoiGianHienHanh(); } }

B khi dng sao chp


B khi dng sao chp thc hin vic to mt i tng mi bng cch sao chp tt c cc bin t mt i tng c v cng mt kiu d liu. public ThoiGian( ThoiGian tg) { Nam = tg.Nam; Thang = tg.Thang; Ngay = tg.Ngay; Gio = tg.Gio; Phut = tg.Phut; Giay = tg.Giay; }

B khi dng tnh


Nu mt lp khai bo b khi dng tnh (static constructor), th c m bo rng b khi dng tnh ny s c thc hin trc bt k th hin no ca lp c to ra
static ThoiGian() { Ten = Thoi gian; } Khng c bt c thuc tnh truy cp no nh public trc b khi dng tnh.

B khi dng private


C# khng c phng thc ton cc v hng s ton cc. Do vy chng ta c th to ra nhng lp tin ch nh ch cha cc phng thc tnh. ngn nga vic to bt c th hin ca lp ta to ra b khi dng khng c tham s v khng lm g c, tc l bn trong thn ca phng thc rng, v thm vo phng thc ny c nh du l private.

Khi to bin thnh vin


Cc bin thnh vin c th c khi to trc tip khi khai bo, thay v phi thc hin khi to cc bin trong b khi dng. private int Giay=30; Khi xc nh gi tr khi to nh vy bin s khng nhn gi tr mc nh m chng trnh cung cp. Nu cc bin ny khng c gn li gi tr trong b khi dng th n s nhn gi tr c khi to

T kha this
T kha this dng tham chiu n th hin hin hnh ca mt i tng, c xem con tr n ca tt c cc phng thc khng c thuc tnh tnh trong mt lp. Tham chiu this c s dng:

Khi cc bin thnh vin bi che lp bi cc tham s a vo public void SetYear(int Nam) { this.Nam=Nam; }

T kha this
S dng tham chiu this truyn i tng hin hnh vo mt tham s ca phng thc i tng khc S dng tham chiu this l mng, ch mc (indexer) public string this [ int index ] { get { } set {} }

S dng cc thnh vin tnh (static)


Thuc tnh v phng thc trong mt lp c th l thnh vin th hin (instance members) hay thnh vin tnh (static members). Thnh vin th hin hay thnh vin ca i tng lin quan n th hin ca mt kiu d liu. Trong khi thnh vin tnh c xem nh mt phn ca lp. Chng ta c th truy cp n thnh vin tnh ca mt lp thng qua tn lp c khai bo. Cn truy cp n thnh vin th hin buc phi thng qua th hin ca lp (i tng)

Gi mt phng thc tnh


using System; public class Class1 { public void SomeMethod(int p1, float p2) { Console.WriteLine(Ham nhan duoc hai tham so: {0} va {1}, p1,p2); } }

Gi mt phng thc tnh


public class Tester { static void Main() { int var1 = 5; float var2 = 10.5f; Class1 c = new Class1(); c.SomeMethod( var1, var2 ); } }

Np chng phng thc


Khi xy dng lp, ta c mong mun to ra nhiu hm c cng tn nhng nhn tham s khc nhau. Chc nng ny gi l np chng phng thc void myMethod( int p1 ); void myMethod( int p1, int p2 ); void myMethod( int p1, string p2 );

Truyn tham s
Tham s c kiu d liu l gi tr th s c truyn gi tr vo cho phng thc. Tuy nhin, C# cn cung cp kh nng cho php ta truyn cc i tng c kiu gi tr di hnh thc l tham chiu.

ref cho php truyn cc i tng gi tr vo trong phng thc theo kiu tham chiu. out trong trng hp mun truyn di dng tham chiu m khng cn phi khi to gi tr ban u cho tham s truyn. params cho php phng thc chp nhn s lng nhiu cc tham s.

Truyn tham chiu


using System; public class Time { public void DisplayCurrentTime() { Console.WriteLine({0}/{1}/{2}/ {3}:{4}:{5}, Date, Month, Year, Hour, Minute, Second); } public void GetTime(int h, int m, int s) { h = Hour; m = Minute; s = Second; }

Truyn tham chiu


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; }

Truyn tham chiu


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); } }

delegate
y quyn (delegate) l kiu d liu tham chiu c dng ng gi mt phng thc vi tham s v kiu tr v xc nh. Chng ta c th ng gi bt c phng thc thch hp no vo trong mt i tng y quyn. N khng cn bit n nhng lp i tng m n tham chiu ti. iu cn quan tm n nhng i tng l cc i mc ca phng thc v kiu tr v phi ph hp vi i tng y quyn khai bo. public delegate int WhichIsFirst(object obj1, object obj2);

delegate
namespace NewExample { public delegate void ExampleDelagate(); class Example { public void Method1() {Console.WriteLine("Method 1"); } public void Method2() {Console.WriteLine("Method 2"); } }

delegate
class Program { public static void Main() { Example a=new Example(); ExampleDelegate deg; deg=new ExampleDeleage(a.Method1); deg(); deg=new ExampleDeleage(a.Method2); deg(); } }

Multicast delegate

C ch multicasting cho php gi hai phng thc thc thi thng qua mt y quyn n. iu ny tr nn quan trng trong vic x l cc s kin. Bt c y quyn no tr v gi tr void u l y quyn multicast. Hai y quyn multicast c th c kt hp vi nhau bng ton t cng (+) v c xa i bng ton t tr (-). Kt qu l mt y quyn multicast mi gi n tt c cc phng thc thc thi nguyn thy ca c hai bn.

Multicast delegate
V d: Cn tnh gi tr ca cc biu thc x+3, x^2+5x+6, sin(x) theo c ch multicast delegate
public delegate void MulticastDelegate(double x); public class A { static void Func1(double x) { Console.WriteLine(Func1={0},x+3) ; } }

delegate
static void Func2(double x) {
Console.WriteLine(Func2={0},x*x+5*x+6);

} static void Func3(double x) {


Console.WriteLine(Func3={0},Math.sin(x));

} }

delegate
class Program { static void Main() { //Nhap gia tri cho x MulticastDelegate mulDel; mulDel=new MulticastDelegate(A.Func1); mulDel+=new MulticastDelegate(A.Func2); mulDel+=new MulticastDelegate(A.Func3); mulDel(x); }

event
Trong mi trng giao din ha (Graphical User Interfaces: GUIs), Windows hay trong trnh duyt web i hi cc chng trnh phi p ng cc s kin (event). Mt s kin c th l mt nt lnh c nhn, mt mc trong menu c chn, hnh ng sao chp tp tin hon thnh,...Mt hnh ng no xy ra, v ta phi p ng li s kin . Chng ta khng th on trc c khi no th cc s kin s xut hin. H thng s ch cho n khi nhn c s kin, v s chuyn vo cho trnh x l s kin thc hin.

You might also like