業務需求:
在程序中要求將兩個用戶的用戶名和他們的持有金額的相加,如何來實現呢?
一般實現如下:
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