VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test

C# Cơ Bản

C# là gì? - C# được sử dụng để làm gì? C# - Cài đặt môi trường C# - Cấu trúc chương trình C# - Cấu trúc cơ bản C# - Kiểu dữ liệu C# - Ép kiểu dữ liệu C# - Hằng số (Constant) C# - Toán tử C# - Lệnh if-else C# - Lệnh switch-case C# - Vòng lặp for C# - Vòng lặp while C# - Vòng lặp do-while C# - Nullable C# - Phương thức C# - Lớp (class) và đối tượng (Object) C# - Mảng (array) C# - Chuỗi (string) C# - Struct C# - Enum C# - Interface C# - Namespace C# - Preprocessor Directive C# - Regular Expression C# - Xử lý ngoại lệ C# - File I/O

Các Tính Chất Hướng Đối Tượng C#

C# - Tính đóng gói C# - Tính kế thừa C# - Tính đa hình C# - Nạp chồng toán tử

C# Nâng Cao

C# - Attribute C# - Reflection C# - Property C# - Indexer C# - Delegate C# - Sự kiện (Event) C# - Collection C# - Generic C# - Phương thức nặc danh C# - Unsafe Code C# - Multithreading

Bài tập C#

Bài tập C# có lời giải

Học Lập Trình C/C++

Học lập trình C Học lập trình C++
1 / 3
❮ ❯

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


previous
next

Nội dung chính

  • Nạp chồng toán tử (Operator Overloading)
  • Triển khai Nạp chồng toán tử trong C#
  • Toán tử có thể nạp chồng và không thể nạp chồng trong C#
  • Ví dụ Nạp chồng toán tử trong C#

Nạp chồng toán tử (Operator Overloading)

Nạp chồng toán tử (Operator Overloading) trong C# 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:


public static Box operator+ (Box b, Box c)
{
   Box box = new Box();
   box.chieu_dai = b.chieu_dai + c.chieu_dai;
   box.chieu_rong = b.chieu_rong + c.chieu_rong;
   box.chieu_cao = b.chieu_cao + c.chieu_cao;
   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#: tạo hai lớp có tên lần lượt là Box, TestCsharp như sau:

Lớp Box: chứa các thuộc tính và phương thức


using System;
namespace VietTutsCsharp
{
    class Box
    {
        private double chieu_dai;
        private double chieu_rong;
        private double chieu_cao;
        public double tinhTheTich()
        {
            return chieu_dai * chieu_rong * chieu_cao;
        }        public void setChieuDai(double len)
        {
            chieu_dai = len;
        }        public void setChieuRong(double bre)
        {
            chieu_rong = bre;
        }        public void setChieuCao(double hei)
        {
            chieu_cao = hei;
        }        // nap chong toan tu + de cong hai doi tuong Box.
        public static Box operator +(Box b, Box c)
        {
            Box box = new Box();
            box.chieu_dai = b.chieu_dai + c.chieu_dai;
            box.chieu_rong = b.chieu_rong + c.chieu_rong;
            box.chieu_cao = b.chieu_cao + c.chieu_cao;
            return box;
        }
    }
}

Lớp TestCsharp: chứa phương thức main() để thao tác trên đối tượng Box


using System;
namespace VietTutsCsharp
{
    public class TestCsharp
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Nap chong toan tu trong C#");
            Console.WriteLine("Vi du minh hoa nap chong toan tu");
            Console.WriteLine("--------------------------");
            //tao cac doi tuong Box1, Box2 va Box3
            Box Box1 = new Box();
            Box Box2 = new Box();
            Box Box3 = new Box();
            double the_tich = 0.0;
            // nhap thong tin Box1
            Box1.setChieuDai(3.0);
            Box1.setChieuRong(5.0);
            Box1.setChieuCao(4.0);
            // nhap thong tin Box2
            Box2.setChieuDai(6.0);
            Box2.setChieuRong(7.0);
            Box2.setChieuCao(5.0);
            // tinh va hien thi the tich Box1
            the_tich = Box1.tinhTheTich();
            Console.WriteLine("The tich cua Box1 la: {0}", the_tich);
            // tinh va hien thi the tich Box2
            the_tich = Box2.tinhTheTich();
            Console.WriteLine("The tich cua Box2 la: {0}", the_tich);
            // con hai doi tuong
            Box3 = Box1 + Box2;
            // tinh va hien thi the tich Box3
            the_tich = Box3.tinhTheTich();
            Console.WriteLine("The tich cua Box3 la: {0}", the_tich);
            Console.ReadKey();
        }
    }
}

Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

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

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ử Mô 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ụ Nạp chồng toán tử trong C#

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#: ở trên chúng ta đã tạo hai lớp Box, TestCsharp, bây giờ chúng ta sửa lại code của mỗi lớp như sau:

Lớp Box: chứa các thuộc tính và phương thức


using System;
namespace VietTutsCsharp
{
    class Box
    {
        private double chieu_dai;
        private double chieu_rong;
        private double chieu_cao;
        public double tinhTheTich()
        {
            return chieu_dai * chieu_rong * chieu_cao;
        }
        public void setChieuDai(double len)
        {
            chieu_dai = len;
        }
        public void setChieuRong(double bre)
        {
            chieu_rong = bre;
        }
        public void setChieuCao(double hei)
        {
            chieu_cao = hei;
        }        // nap chong toan tu +
        public static Box operator +(Box b, Box c)
        {
            Box box = new Box();
            box.chieu_dai = b.chieu_dai + c.chieu_dai;
            box.chieu_rong = b.chieu_rong + c.chieu_rong;
            box.chieu_cao = b.chieu_cao + c.chieu_cao;
            return box;
        }
        //nap chong toan tu ==
        public static bool operator ==(Box lhs, Box rhs)
        {
            bool status = false;
            if (lhs.chieu_dai == rhs.chieu_dai && lhs.chieu_cao == rhs.chieu_cao 
                && lhs.chieu_rong == rhs.chieu_rong)
            {
                status = true;
            }
            return status;
        }
        //nap chong toan tu !=
        public static bool operator !=(Box lhs, Box rhs)
        {
            bool status = false;
            if (lhs.chieu_dai != rhs.chieu_dai || lhs.chieu_cao != rhs.chieu_cao 
                || lhs.chieu_rong != rhs.chieu_rong)
            {
                status = true;
            }
            return status;
        }
        //nap chong toan tu <
        public static bool operator <(Box lhs, Box rhs)
        {
            bool status = false;
            if (lhs.chieu_dai < rhs.chieu_dai && lhs.chieu_cao < rhs.chieu_cao 
                && lhs.chieu_rong < rhs.chieu_rong)
            {
                status = true;
            }
            return status;
        }
        //nap chong toan tu >
        public static bool operator >(Box lhs, Box rhs)
        {
            bool status = false;
            if (lhs.chieu_dai > rhs.chieu_dai && lhs.chieu_cao > rhs.chieu_cao 
                && lhs.chieu_rong > rhs.chieu_rong)
            {
                status = true;
            }
            return status;
        }
        //nap chong toan tu <=
        public static bool operator <=(Box lhs, Box rhs)
        {
            bool status = false;
            if (lhs.chieu_dai <= rhs.chieu_dai && lhs.chieu_cao <= rhs.chieu_cao 
                && lhs.chieu_rong <= rhs.chieu_rong)
            {
                status = true;
            }
            return status;
        }
        //nap chong toan tu >=
        public static bool operator >=(Box lhs, Box rhs)
        {
            bool status = false;
            if (lhs.chieu_dai >= rhs.chieu_dai && lhs.chieu_cao >= rhs.chieu_cao 
                && lhs.chieu_rong >= rhs.chieu_rong)
            {
                status = true;
            }
            return status;
        }
        //nap chong phuong thuc ToString()
        public override string ToString()
        {
            return String.Format("({0}, {1}, {2})", chieu_dai, chieu_rong, chieu_cao);
        }
    }
}

Lớp TestCsharp: chứa phương thức main() để thao tác trên đối tượng Box


using System;
namespace VietTutsCsharp
{
    public class TestCsharp
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Nap chong toan tu trong C#");
            Console.WriteLine("Vi du minh hoa nap chong toan tu");
            Console.WriteLine("--------------------------");
            //tao cac doi tuong Box1, Box2, Box2, Box4
            Box Box1 = new Box();
            Box Box2 = new Box();
            Box Box3 = new Box();
            Box Box4 = new Box();
            double the_tich = 0.0;
            // nhap thong tin Box1
            Box1.setChieuDai(6.0);
            Box1.setChieuRong(7.0);
            Box1.setChieuCao(5.0);
            // nhap thong tin Box2
            Box2.setChieuDai(12.0);
            Box2.setChieuRong(13.0);
            Box2.setChieuCao(10.0);
            //hien thi thong tin cac Box boi su dung phuong thuc nap chong ToString():
            Console.WriteLine("Thong tin Box 1: {0}", Box1.ToString());
            Console.WriteLine("Thong tin Box 2: {0}", Box2.ToString());
            // tinh the tich Box1
            the_tich = Box1.tinhTheTich();
            Console.WriteLine("The tich cua Box1 la: {0}", the_tich);
            // tinh the tich Box2
            the_tich = Box2.tinhTheTich();
            Console.WriteLine("The tich cua Box2 la: {0}", the_tich);
            // cong hai doi tuong
            Box3 = Box1 + Box2;
            Console.WriteLine("Thong tin Box 3: {0}", Box3.ToString());
            // tinh the tich cua Box3
            the_tich = Box3.tinhTheTich();
            Console.WriteLine("The tich cua Box3 la: {0}", the_tich);
            //so sanh cac Box
            if (Box1 > Box2)
                Console.WriteLine("Box1 la lon hon Box2");
            else
                Console.WriteLine("Box1 la khong lon hon Box2");
            if (Box1 < Box2)
                Console.WriteLine("Box1 la nho hon Box2");
            else
                Console.WriteLine("Box1 la khong nho hon Box2");
            if (Box1 >= Box2)
                Console.WriteLine("Box1 la lon hon hoac bang Box2");
            else
                Console.WriteLine("Box1 la khong lon hon hoac bang Box2");
            if (Box1 <= Box2)
                Console.WriteLine("Box1 la nho hon hoac bang Box2");
            else
                Console.WriteLine("Box1 la khong nho hon hoac bang Box2");
            if (Box1 != Box2)
                Console.WriteLine("Box1 la khong bang Box2");
            else
                Console.WriteLine("Box1 bang Box2");
            Box4 = Box3; if (Box3 == Box4)
                Console.WriteLine("Box3 bamg Box4");
            else
                Console.WriteLine("Box3 la khong bang Box4");
            Console.ReadKey();
        }
    }
}

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

Nạp chồng toán tử trong C#
previous
next


Recent Updates

Bài tập quản lý sinh viên trong C#Bài tập C# - Liệt kê số Fibonacci nhỏ hơn n và là số nguyên tố trong C#Bài tập C# - Tìm số thuận nghịch trong C#Bài tập C# - Tính tổng của các chữ số của môt số nguyên n trong C#Bài tập C# - Phân tích số nguyên n thành tích các số nguyên tố trong C#Bài tập C# - Liệt kê tất cả số nguyên tố có 5 chữ số trong C#Bài tập C# - Liệt kê n số nguyên tố đầu tiên trong C#Bài tập C# - Liệt kê tất cả các số nguyên tố nhỏ hơn n trong C#Bài tập C# - Tìm ước số chung lớn nhất (USCLN) và bội số chung nhỏ nhất (BSCNN) của 2 sốGiải phương trình bậc 2 trong C#Chuyển đổi hệ cơ số trong C#Tính giai thừa trong C#Sắp Tết 2026 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2026?

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml