Lập Trình C# - Nạp Chồng Toán Tử - T-Root

T-Root

I very like the numbers zero and one.

TwitterFacebookGoogle PlusLinkedInRSS FeedEmail

Lập Trình C# - Nạp Chồng Toán Tử

09:09:00 Unknown 0 comments

Operator Overloading là Nạp chồng toán tử. Bạn có thể tái định nghĩa hoặc nạp chồng hầu hết các toán tử có sẵn trong C#. Vì thế, một lập trình viên có thể sử dụng các toán tử với các kiểu tự định nghĩa (user-defined). Các toán tử được nạp chồng trong C# là các hàm với các tên đặc biệt: từ khóa operator được theo sau bởi biểu tượng cho toán tử đang được định nghĩa. Tương tự như bất kỳ hàm nào khác, một toán tử được nạp chồng có một kiểu trả về và một danh sách tham số. Ví dụ, bạn xét hàm sau: publicstaticBoxoperator+(Box b,Box c){Box box =newBox(); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height;return box;} Hàm trên triển khai toán tử cộng (+) cho một lớp Box tự định nghĩa (user-defined). Nó cộng các thuộc tính của hai đối tượng Box và trả về đối tượng kết quả Box.

Triển khai Nạp chồng toán tử trong C#

Ví dụ dưới đây minh họa cách triển khai nạp chồng toán tử trong C#: usingSystem;namespaceOperatorOvlApplication{classBox{privatedouble length;// Length of a boxprivatedouble breadth;// Breadth of a boxprivatedouble height;// Height of a boxpublicdouble getVolume(){return length * breadth * height;}publicvoid setLength(double len ){ length = len;}publicvoid setBreadth(double bre ){ breadth = bre;}publicvoid setHeight(double hei ){ height = hei;}// Overload + operator to add two Box objects.publicstaticBoxoperator+(Box b,Box c){Box box =newBox(); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height;return box;}}classTester{staticvoidMain(string[] args){BoxBox1=newBox();// Declare Box1 of type BoxBoxBox2=newBox();// Declare Box2 of type BoxBoxBox3=newBox();// Declare Box3 of type Boxdouble volume =0.0;// Store the volume of a box here// box 1 specificationBox1.setLength(6.0);Box1.setBreadth(7.0);Box1.setHeight(5.0);// box 2 specificationBox2.setLength(12.0);Box2.setBreadth(13.0);Box2.setHeight(10.0);// volume of box 1 volume =Box1.getVolume();Console.WriteLine("Volume of Box1 : {0}", volume);// volume of box 2 volume =Box2.getVolume();Console.WriteLine("Volume of Box2 : {0}", volume);// Add two object as follows:Box3=Box1+Box2;// volume of box 3 volume =Box3.getVolume();Console.WriteLine("Volume of Box3 : {0}", volume);Console.ReadKey();}}} Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả: Volume of Box1 : 210 Volume of Box2 : 1560 Volume of Box3 : 5400

Toán tử có thể nạp chồng và không thể nạp chồng trong C#

Bảng dưới miêu tả các toán tử có thể nạp chồng trong C#:
Toán tửMiêu tả
+, -, !, ~, ++, --Những toán tử một ngôi này nhận một toán hạng và có thể được nạp chồng
+, -, *, /, %Những toán tử nhị phân này nhận một toán hạng và có thể được nạp chồng
==, !=, <, >, <=, >=Các toán tử so sánh có thể được nạp chồng
&&, ||Các toán tử logic điều kiện không thể được nạp chồng một cách trực tiếp
+=, -=, *=, /=, %=Các toán tử gán không thể được nạp chồng
=, ., ?:, ->, new, is, sizeof, typeofCác toán tử này không thể được nạp chồng

Ví dụ

Từ các khái niệm trên, chúng ta kế thừa ví dụ trên và nạp chồng thêm một số toán tử trong C#: usingSystem;namespaceOperatorOvlApplication{classBox{privatedouble length;// Length of a boxprivatedouble breadth;// Breadth of a boxprivatedouble height;// Height of a boxpublicdouble getVolume(){return length * breadth * height;}publicvoid setLength(double len ){ length = len;}publicvoid setBreadth(double bre ){ breadth = bre;}publicvoid setHeight(double hei ){ height = hei;}// Overload + operator to add two Box objects.publicstaticBoxoperator+(Box b,Box c){Box box =newBox(); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height;return box;}publicstaticbooloperator==(Box lhs,Box rhs){bool status =false;if(lhs.length == rhs.length && lhs.height == rhs.height && lhs.breadth == rhs.breadth){ status =true;}return status;}publicstaticbooloperator!=(Box lhs,Box rhs){bool status =false;if(lhs.length != rhs.length || lhs.height != rhs.height || lhs.breadth != rhs.breadth){ status =true;}return status;}publicstaticbooloperator<(Box lhs,Box rhs){bool status =false;if(lhs.length < rhs.length && lhs.height < rhs.height && lhs.breadth < rhs.breadth){ status =true;}return status;}publicstaticbooloperator>(Box lhs,Box rhs){bool status =false;if(lhs.length > rhs.length && lhs.height > rhs.height && lhs.breadth > rhs.breadth){ status =true;}return status;}publicstaticbooloperator<=(Box lhs,Box rhs){bool status =false;if(lhs.length <= rhs.length && lhs.height <= rhs.height && lhs.breadth <= rhs.breadth){ status =true;}return status;}publicstaticbooloperator>=(Box lhs,Box rhs){bool status =false;if(lhs.length >= rhs.length && lhs.height >= rhs.height && lhs.breadth >= rhs.breadth){ status =true;}return status;}publicoverridestringToString(){returnString.Format("({0}, {1}, {2})", length, breadth, height);}}classTester{staticvoidMain(string[] args){BoxBox1=newBox();// Declare Box1 of type BoxBoxBox2=newBox();// Declare Box2 of type BoxBoxBox3=newBox();// Declare Box3 of type BoxBoxBox4=newBox();double volume =0.0;// Store the volume of a box here// box 1 specificationBox1.setLength(6.0);Box1.setBreadth(7.0);Box1.setHeight(5.0);// box 2 specificationBox2.setLength(12.0);Box2.setBreadth(13.0);Box2.setHeight(10.0);//displaying the Boxes using the overloaded ToString():Console.WriteLine("Box 1: {0}",Box1.ToString());Console.WriteLine("Box 2: {0}",Box2.ToString());// volume of box 1 volume =Box1.getVolume();Console.WriteLine("Volume of Box1 : {0}", volume);// volume of box 2 volume =Box2.getVolume();Console.WriteLine("Volume of Box2 : {0}", volume);// Add two object as follows:Box3=Box1+Box2;Console.WriteLine("Box 3: {0}",Box3.ToString());// volume of box 3 volume =Box3.getVolume();Console.WriteLine("Volume of Box3 : {0}", volume);//comparing the boxesif(Box1>Box2)Console.WriteLine("Box1 is greater than Box2");elseConsole.WriteLine("Box1 is greater than Box2");if(Box1<Box2)Console.WriteLine("Box1 is less than Box2");elseConsole.WriteLine("Box1 is not less than Box2");if(Box1>=Box2)Console.WriteLine("Box1 is greater or equal to Box2");elseConsole.WriteLine("Box1 is not greater or equal to Box2");if(Box1<=Box2)Console.WriteLine("Box1 is less or equal to Box2");elseConsole.WriteLine("Box1 is not less or equal to Box2");if(Box1!=Box2)Console.WriteLine("Box1 is not equal to Box2");elseConsole.WriteLine("Box1 is not greater or equal to Box2");Box4=Box3;if(Box3==Box4)Console.WriteLine("Box3 is equal to Box4");elseConsole.WriteLine("Box3 is not equal to Box4");Console.ReadKey();}}} Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả: Box 1: (6, 7, 5) Box 2: (12, 13, 10) Volume of Box1 : 210 Volume of Box2 : 1560 Box 3: (18, 20, 15) Volume of Box3 : 5400 Box1 is not greater than Box2 Box1 is less than Box2 Box1 is not greater or equal to Box2 Box1 is less or equal to Box2 Box1 is not equal to Box2 Box3 is equal to Box4

Posted in: C# Related article: Bài đăng Mới hơn Bài đăng Cũ hơn Trang chủ

0 Comment:

Đăng nhận xét

Thank you for your comments!

Facebook + Followers

ti else. Được tạo bởi Blogger.   Copyright © 2011 T-Root | Powered by www.Becamex.org tielse.blogspot.com - Design my Dream, Design my Love, Design my Life

Từ khóa » Toán Tử New C#