在C#中的operator重載操作符


業務需求:

在程序中要求將兩個用戶的用戶名和他們的持有金額的相加,如何來實現呢?

 

一般實現如下:

User user1 = new User();
user1.Name = "張三";
user1.Money = 20;

User user2 = new User();
user2.Name = "李四";
user2.Money = 15;

//將兩個對象相加,得到用戶名和金額合計
User user3 = new User();
user3.Name = user1.Name +","+ user2.Name;
user3.Money = user1.Money + user2.Money;

//打印結果:
//user3.Name :“張三,李四”
//user3.Moeny:“35”;

試想,能不能將user3那三行代碼改為:

User user3 = user1 + user2;

或者說

User userSum = user1 + user2 + user3 + user4 + userN.....

------------------------------------------------------------------

如何實現這個“+”(加號操作符)的重載方法,讓我們自己寫的一些類型/對象之間可以進行用操作符來寫,這樣可以大量的簡化一些代碼。

 

在User類中的“+”(加號操作符)的重載方法如下:

        /// <summary>
        /// 將操作符+重載
        /// </summary>
        /// <param name="user1">用戶1</param>
        /// <param name="user2">用戶2</param>
        /// <returns></returns>
        public static User operator +(User user1, User user2)
        {
            User retUser = new User();
            retUser.Name = user1.Name +","+ user2.Name;
            retUser.Money = user1.Money + user2.Money;
            return retUser;
        }

 

 

完整Demo代碼2個cs文件:

Main.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace OperatorDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //創建對象“張三”
            User user_z = new User();
            user_z.Name = "張三";
            user_z.Money = 100;

            //創建對象“李四”
            User user_l = new User();
            user_l.Name = "李四";
            user_l.Money = 50;

            //將“張三”和“李四”相加
            User sumUser = user_z + user_l;

            //打印出相加后的結果
            Console.WriteLine("姓名:"+sumUser.Name);
            Console.WriteLine("持有金額:"+ sumUser.Money);

            Console.ReadLine();
        }
    }
}

 

User.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace OperatorDemo
{
    public sealed class User
    {
        /// <summary>
        /// 用戶姓名
        /// </summary>
        public string Name { get; set; }
        
        /// <summary>
        /// 用戶持有金額
        /// </summary>
        public decimal Money { get; set; }

        /// <summary>
        /// 將操作符+重載
        /// </summary>
        /// <param name="user1">用戶1</param>
        /// <param name="user2">用戶2</param>
        /// <returns></returns>
        public static User operator +(User user1, User user2)
        {
            User retUser = new User();
            retUser.Name = user1.Name +","+ user2.Name;
            retUser.Money = user1.Money + user2.Money;
            return retUser;
        }
    }
}

 

 

以及操作可以寫其他的操作符重載,比如 - * / == != > >= 等....

附上完整項目源碼:http://files.cnblogs.com/andrew-blog/OperatorDemo.rar

參考:http://www.wxzzz.com/?id=97


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM