Lập Trình C# - Nạp Chồng Toán Tử - T-Root
Có thể bạn quan tâm
I very like the numbers zero and one.





Lập Trình C# - Nạp Chồng Toán Tử
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 : 5400Toá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, typeof | Cá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 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 LifeTừ khóa » Toán Tử New C#
-
Toán Tử Trong C# | How Kteam
-
Thắc Mắc Về Toán Tử New Trong C
-
C# : Đôi Chút Về Từ Khóa New | CHUNG VĨNH KHANG'S BLOG
-
Các Toán Tử (operator) Cơ Bản Trong C# | Tự Học ICT
-
Toán Tử Trong C# - Freetuts
-
Khởi Tạo Phương Thức Khởi Tạo Trong C Sharp
-
Sử Dụng Lớp Thuộc Tính Trong C# Tạo Và Sử Dụng đối Tượng Lớp
-
Các Toán Tử Cơ Bản Trong C# - Học Lập Trình Từ Con Số 0 - CodeGym
-
[C# Căn Bản] Kiểu Dữ Liệu, Khai Báo Biến, Hằng Số, Toán Tử - Viblo
-
Bài 4 Toán Tử New Và Cấp Phát Bộ Nhớ Cho Con Trỏ - YouTube
-
C# Căn Bản - #16: Toán Tử - YouTube
-
Operator Overloading Cơ Bản Nhất Trong C# - CodeLearn
-
Nạp Chồng Toán Tử Trong C#
-
Toán Tử New Và New[]
-
Các Hiểu Biết Cơ Bản Về C# - Viblo
-
Lap Trinh Tu Co Ban Den Nang Cao Mon Huong Doi Tuong C
-
C# - C Sharp: Con Trỏ (Pointer) Trong C# | V1Study
-
Bài 5. Toán Tử Trong C# - Series Khóa Học C# Cơ Bản