You are on page 1of 20

Lp trnh Web

Chng 6:

NP CHNG TON T

Lp trnh Web

Ni dung
S dng t kha operator.

H tr ngn ng .NET khc.


S dng ton t. Ton t so snh bng. Ton t chuyn i. Cu hi & bi tp.

Lp trnh Web

S dng t kha operator


Trong ngn ng C#, cc ton t l cc phng thc tnh.
Gi tr tr v ca n th hin kt qu ca ton t, cc tham

s l cc ton hng. Vic to ton t cho mt lp cng ging nh vic np chng (overload) phng thc ca lp.
Ton t c khai bo vi t kha operator :
V d:

public static PhanSo operator * (PhanSo a, PhanSo b){ ...... }

Lp trnh Web

public class PhanSo{ int tu; int mau; public PhanSo(int t, int m){ tu = t; mau = m; } public override string ToString(){ return tu.ToString()+"/"+mau.ToString(); } public static PhanSo operator *(PhanSo a, PhanSo b){ return new PhanSo(a.tu * b.tu, a.mau * b.mau); } static void Main(){ PhanSo a = new PhanSo(2, 3); PhanSo b = new PhanSo(4, 5); PhanSo c = a * b; Console.WriteLine(c.ToString()); }
}
Lp trnh Web

H tr ngn ng .NET khc


Np chng ton t rt tin dng nhng khng phi ngn

ng no cng h tr np chng ton t ( v d nh: Visual Basic, Java,) Vy lm th no gi thc hin ton t ca mt lp vit bng C# trong mt lp khng h tr np chng ton t?

Khi nh ngha mt ton t trong C#, ton t ny s c

trnh bin dch bin dch thnh mt phng thc tnh c bit trong ngn ng IL. Chi tit tn cc phng thc ca cc ton t nh trong bng sau:

C# Operator Symbol + ~ ++

Special Method Name

op_UnaryPlus op_UnaryNegation op_OnesComplement op_Increment

+ += -

op_Decrement
op_Addition op_AdditionAssignment op_Subtraction

-=
* *= /

op_SubtractionAssignment
op_Multiply op_MultiplicationAssignment op_Division

C# Operator Symbol /= % %= ^ ^=

Special Method Name op_DivisionAssignment op_Modulus op_ModulusAssignment op_ExclusiveOr op_ExclusiveOrAssignment

&
&= | |= &&

op_BitwiseAnd
op_BitwiseAndAssignment op_BitwiseOr op_BitwiseOrAssignment op_LogicalAnd

op_LogicalNot

C# Operator Symbol << <<= >> >>= == !=

Special Method Name op_LeftShift op_LeftShiftAssignment op_RightShift op_RightShiftAssignment op_Equality op_Inequality

<
> <=

op_LessThan
op_GreaterThan op_LessThanOrEqual

>=
=

op_GreaterThanOrEqual
op_Assign

H tr ngn ng .NET khc


VB.NET khng cho php mt lp nh ngha ton t, v

n cng ko th chuyn code s dng k t + thnh gi phng thc op_Addition c. Do gi thc thi ton t + trong VB.NET ta gi thc thi phng thc Op_Addition
Csharp define operator +
generate

Op_Addition method
call Visual Basic

H tr ngn ng .NET khc


public class CSharp { public static CSharp operator+(CSharpType a, CSharpType b) { return null; } }

Public Class VBApp Public Shared Sub Main() Dim cs as new CSharpType() cs = CSharpType.op_Addition(cs, cs) End Sub End Class

H tr ngn ng .NET khc


Khi nh ngha ton t ta nn nh ngha thm

mt phng thc c tn thn thin hn v bn trong n gi thc thi ton t. V d:

H tr ngn ng .NET khc


public class Some { public static Some operator+(CSharpType a, CSharpType b) { return null; } public Some Add(Some s1){return(this+s1);} } //... Dim s1 as new Some() Dim s2 as new Some() Dim s3 as new Some() S3 = s1.Add(s2) // s3 = Some.op_Addition(s1,s2) //...

S dng ton t
Np chng ton t c th lm cho m ngun ca chng ta

trc quan v nhng hnh ng ca lp m chng ta xy dng ging nh cc lp c xy dng sn. Vic np chng ton t cng c th lm cho m ngun phc tp mt cch kh qun l nu chng ta ph v cch th hin thng thng s dng nhng ton t. Np chng ton t c tnh cht i xng:
Khi ta nh ngha ton t == bt buc phi nh ngha != Tng t cho cc cp ton t: > v <, <= v >=

Lp trnh Web

14

Ton t so snh bng


Ton t == v phng thc Equal c k tha t Object

l hon ton khc nhau. Khi nh ngha ton t == th cng nn nh ngha li phng thc Equal ca lp Object.
public override bool Equals(object o) { if (!(o is PhanSo)) { return false; } return this == (PhanSo)o; }
Lp trnh Web

15

Ton t chuyn kiu


Ton t chuyn kiu dng chuyn mt i tng t

kiu ny sang kiu khc. C php khai bo ton t chuyn kiu trong C#:
implicit

public + static +

+ operator + typeName1 + (typeName2) explicit

typeName1 : Kiu ch m i tng s c chuyn

thnh. typeName2 : Kiu ngun.

Ton t chuyn kiu


T kha implicit cho bit vic chuyn kiu c th c

thc hin ngm nh bi trnh bin dch. T kha explicit cho bit vic chuyn kiu ch c thc hin mt cch tng minh. V d:

class Rational {
// Constructs a Rational from an Int32

public Rational(Int32 numerator) { ... }


// Converts a Rational to an Int32

public Int32 ToInt32() { }


// Implicitly constructs and returns a Rational from an Int32

public static implicit operator Rational(Int32 numerator) { return new Rational(numerator); }


// Explicitly returns an Int32 from a Rational

public static explicit operator Int32(Rational r) { return r.ToInt32(); }

Ton t chuyn kiu


Class App { static void // Implicit cast Rational // Explicit cast Int32 x } }
Main() { from Int32 to Rational r1 = 5; from Rational to Int32 = (Int32) r1;

Bi tp
Xy dng lp Phn s vi cc php ton +,-,*,/,^, cc ton t so snh v ton t chuyn kiu tng minh t phn s sang s nguyn v ngm nh t s nguyn sang phn s. 2. Xy dng lp Vector trong khng gian 2 chiu vi cc php ton cng, tr, nhn, bng, cc ton t so snh...
1.

Lp trnh Web

20

You might also like