C#運算符重載學習總結
C#運算符重載是個不常出現的應用,同時也是個好玩的東西。
我們可以使用他來實現這樣的需求:
當一個訂單與另外一個訂單相加形成一個新的訂單。新訂單的貨物為兩個訂單的貨物的并集,總價為兩個訂單的總價和。下面實現看看,先做個輔助的貨物類
- public class Merchandise{
- public int Count { get; set; }
- public string Name { get; set; }
- public double UnitPrice { get; set; }
- }然后來實現訂單類
- public class Order
- {
- public double TotalPrices { get; set; }
- public List<Merchandise> Merchadises { get; set; }
- public static Order operator +(Order a, Order b){
- Order newnewOrder = new Order(){
- TotalPrices = a.TotalPrices + b.TotalPrices
- };
- newOrder.Merchadises.AddRange(a.Merchadises);
- newOrder.Merchadises.AddRange(b.Merchadises);
- return newOrder;
- }
- }
下面是客戶端調用代碼
- Order o1 = new Order { TotalPrices = 500.0 };
- o1.Merchadises.AddRange
- new List<Merchandise>{
- new Merchandise{Name = "肥皂",Count=100,UnitPrice=3},
- new Merchandise{Name = "毛巾",Count=100,UnitPrice=2}
- }
- Order o2 = new Order { TotalPrices = 8000.0 };
- o1.Merchadises.AddRange
- new List<Merchandise>{
- new Merchandise{Name = "電視",Count=5,UnitPrice=1000},
- new Merchandise{Name = "DVD",Count=5,UnitPrice=600}
- }
參數
result-type運算符的結果類型。
unary-operator下列運算符之一:+ - ! ~ ++ — true false
op-type***個(或***一個)參數的類型。
operand***個(或***一個)參數的名稱。
binary-operator其中一個:+ - * / % & | ^ << >> == != > < >= <=
op-type2第二個參數的類型。
operand2第二個參數的名稱。
conv-type-out類型轉換運算符的目標類型。
conv-type-in類型轉換運算符的輸入類型。
備注
前兩種形式聲明了用戶定義的內置C#運算符重載。注意,并非所有內置運算符都可以被重載(請參見可重載的運算符)。op-type 和 op-type2 中至少有一個必須是封閉類型(即運算符所屬的類型)。例如,這將防止重定義整數加法運算符。
后兩種形式聲明了轉換運算符。conv-type-in 和 conv-type-out 中正好有一個必須是封閉類型(即,轉換運算符只能從它的封閉類型轉換為其他某個類型,或從其他某個類型轉換為它的封閉類型)。
運算符只能采用值參數,不能采用 ref 或 out 參數。
任何運算符聲明的前面都可以有一個可選的屬性(C# 編程指南)列表。以上介紹C#運算符重載
【編輯推薦】