ươ

Ch

ng 6: N p ch ng toán t

N i dung

(operator) ừ

khoá operator

logic hai ngôi ể  chuy n đ i ki u (ép ki u)

 Toán t  Cách dùng t ử  Các toán t  Toán t  Ví dụ

Toán t

(operator)

̀

Trong C#, toán t

ươ ử

ng th c tĩnh dùng đ  ca i đăt m t phép toán nào đó trên  ọ

ễ ể

ươ

ơ

ứ ể ế  là đ  vi

ng trình g n gàng, d  hi u h n, thay

t mã ch

ử là m t ph ng. M c đích c a toán t ứ

ươ

ụ ng th c.

ố ượ các đ i t ả ọ vì ph i g i ph

Ta có th  cài đ t các toán t

sau:

ọ  Toán h c: +, ­, *, /, %. ừ ộ  C ng tr  m t ngôi: ++, ­­, ­. ệ  Quan h  so sánh: ==, !=, >, <, >=, <=.  Ép ki u: ().

̣

Cú pháp khai báo nguyên m u c a m t toán t

T:

ả ề

ố public static Ki uTr V  operator T (CácThamS ) { ///các câu l nh trong thân toán t }

Chú ý

o Tham s  c a toán t

ố ủ ử ả ị ừ ph i là tham tr  (không dùng các t

khóa ref, out).

o Không đ

ượ ử c cài toán t = (gán), && , || (and, or logic), ?:

ề ệ (đi u ki n), checked, unchecked, new, typeof, as, is

ượ ộ ử không đ c xem là m t toán t .

ử ạ ử ặ o Khi cài đ t các toán t d ng: +, ­, *, / , % thì các toán t

ự ộ ượ ặ +=, ­=, *=, /= ,  %= cũng t đ ng đ c cài đ t.

Chú ý (tt)

o Khi cài đ t toán t

ặ ử ặ ẫ ặ ố thì nên cài đ t theo c p đ i ng u.

ạ ặ ẳ ử ả Ch ng h n, khi cài đ t toán t == thì quá t i thêm toán

t !=…ử

o Khi đ nh nghĩa toán t

ị ử ể ả ỉ ép ki u ta ph i ch  ra đây là toán

ử ể ầ ườ t ị  ép ki u ng m đ nh (implicit) hay t ng minh (explicit).

Cách dùng t

khoá operator

:

Ví dụ public static Fraction operator+ (Fraction lhs, Fraction rhs) ồ ơ

ự ữ ể ả

ử ượ  đ ử Các toán t ủ ạ ồ

ư ế ạ

ươ ớ

ầ ử   ng trình khó   này mà đôi khi còn có các nh m

c n p ch ng  ủ S  h u ích c a các toán t ễ có th  giúp cho đo n mã ngu n c a ta d  nhìn h n,  ơ d  qu n lý và trong sáng h n. ụ Tuy nhiên n u ta quá l m d ng đ a vào các toán t ẽ quá m i hay quá riêng s  làm cho ch ử ử ụ s  d ng các toán t ị ữ ẫ l n vô v  n a

Các toán t

logic hai ngôi

 Các toán t

ố ượ

ng,

ổ ế  khá ph  bi n là  ữ  hai đ i t ằ

ỏ ơ ơ

ươ

ơ

ỏ ơ ặ

ằ ng  ng nh  h n hay b ng và l n h n hay b ng  ử ạ ử  ph i có c p toán h ng hay g i là các toán t

ử  (==) so sánh b ng gi  (!=) so sánh không b ng,   (<) so sánh nh  h n,   (>) so sánh l n h n,   (<=, >=) t  Là các toán t hai ngôi.

Toán t

ổ ể  chuy n đ i ki u (ép ki u)

ơ

ki u th p h n (kích th

ấ ướ ớ

ơ

ướ c  ể ệ c l n) thì vi c chuy n  ể ừ ể  ki u cao

ư ẽ ấ

ổ ố

ể ừ ể Trong C#, khi ta chuy n t nh ) lên ki u cao h n (kích th đ i này luôn thành công nh ng khi chuy n t ể xu ng ki u th p có th  ta s  m t thông tin

Cú pháp đ nh nghĩa toán t

ép ki u:

ả ề

public static [ implicit | explicit ] operator Ki uTr V T (Type V)

ế trong đó Type V  là bi n c n ép sang ki u

ả ề . ể Ki uTr V T

Ví dụ: xây d ng l p phân s  và cài đ t các  phép toán trên phân s .ố

//Chuyen doi ngam dinh tu so nguyen sang phan

so

public static implicit operator PhanSo(int theInt) { Console.WriteLine("Chuyen doi ngam dinh tu so nguyen sang phan so"); return new PhanSo(theInt); } //Chuyen doi tuong minh phan so sang so

nguyen;

public static explicit operator int(PhanSo PS) { return PS.Tu/PS.Mau; }

using System; class PhanSo { int Tu, Mau; // private members //constructor public PhanSo(int TuSo, int MauSo) { Tu = TuSo; Mau = MauSo; } //constructor public PhanSo(int HoleNumber) { Tu = HoleNumber; Mau = 1; } //constructor public PhanSo() { Tu = 0; Mau = 1; }

Ví dụ: xây d ng l p phân s  và cài đ t  các phép toán trên phân s  (tt)ố

// Tang phan so them mot don vi! public static PhanSo operator++(PhanSo PS) { PS.Tu = PS.Mau + PS.Tu; return PS; } //ep phan so ve gia tri True, false de tra loi cau //doi: day co phai la mot phan so hop le hay khong public static implicit operator bool(PhanSo PS) { return PS.Mau !=0; } //Phuong thuc doi phan so thanh chuoi public override string ToString() { String s = Tu.ToString( ) + "/" + Mau.ToString( ); return s; } }

//toan tu so sanh == public static bool operator==(PhanSo PS1, PhanSo PS2) { return (PS1.Tu * PS2.Mau == PS2.Tu * PS1.Mau); } // Toan tu so sanh !=; public static bool operator!=(PhanSo PS1, PhanSo PS2) { return !(PS1 == PS2); } // phong thuc so sanh 2 phan so co bang nhau hay khong public override bool Equals(object o) { Console.WriteLine("Phuong thuc Equals"); if (! (o is PhanSo) ) return false; return this == (PhanSo) o; } //Toan tu cong hai phan so public static PhanSo operator+(PhanSo PS1, PhanSo PS2) { int MauMoi = PS1.Mau * PS2.Mau ; int TuMoi = PS2.Mau * PS1.Tu + PS1.Mau * PS2.Tu; return new PhanSo(TuMoi, MauMoi); }

ả i

Ví dụ: xây d ng l p phân s  và quá t ớ các phép toán trên phân s  (tt)ố

class PhanSoApp

{

static void Main( )

{

PhanSo f1 = new PhanSo(3,4);

Console.WriteLine("f1: {0}", f1.ToString( ));

PhanSo f2 = new PhanSo(2,4);

Console.WriteLine("f2: {0}", f2.ToString( ));

PhanSo f3 = f1 + f2;

Console.WriteLine("f1 + f2 = f3: {0}", f3.ToString());

PhanSo f4 = f3 + 5;

Console.WriteLine("f3 + 5 = f4: {0}", f4.ToString( ));

PhanSo f5 = new PhanSo(4,8);

if (f5 == f2)

{

Console.WriteLine("F5: {0} == F2: {1}", f5.ToString( ), f2.ToString( ));

}

Console.ReadLine(); } }

ả ủ

ế

ươ

K t qu  c a ch

ng trình