ươ
ạ
ồ
ử
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