日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

对象的比较与排序(五):C#运算符重载

發布時間:2025/6/15 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对象的比较与排序(五):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?newOrder?
=?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}
????????????}

????????);

????????Order?o3?
=?o1?+?o2;

可以看出,運算符重載看起來與標準靜態方法聲明類似,但它們使用關鍵字operator 和 運算符本身,而不是一個方法名。現在可以成功地使用 + 運算符和這個類。

注意:

1.要重載運算符,可給類添加運算符類型成員(它們必須是static)。

2.一些運算符有多種用途,(如 - 運算符就有一元和二元兩種功能),因此我們還指定了要處理多少個操作數,以及這些操作數的類型。

3.一般情況下,操作數的類型與定義運算符的類相同,但也可以處理混合 類型的運算符。



貼上MSDN的說明

operator 關鍵字用于在類或結構聲明中聲明運算符。運算符聲明可以采用下列四種形式之一:

?
public static result-type operator unary-operator ( op-type operand )public static result-type operator binary-operator (op-type operand,op-type2 operand2)public static implicit operator conv-type-out ( conv-type-in operand )public static explicit operator conv-type-out ( conv-type-in operand )

參數

result-type

運算符的結果類型。

unary-operator

下列運算符之一:+???-???!???~???++???—???true???false

op-type

第一個(或唯一一個)參數的類型。

operand

第一個(或唯一一個)參數的名稱。

binary-operator

其中一個:+???-???*???/???%???&???|???^???<<???>>???==???!=???>???<???>=???<=

op-type2

第二個參數的類型。

operand2

第二個參數的名稱。

conv-type-out

類型轉換運算符的目標類型。

conv-type-in

類型轉換運算符的輸入類型。

備注

前兩種形式聲明了用戶定義的重載內置運算符的運算符。注意,并非所有內置運算符都可以被重載(請參見可重載的運算符)。op-typeop-type2 中至少有一個必須是封閉類型(即運算符所屬的類型)。例如,這將防止重定義整數加法運算符。

后兩種形式聲明了轉換運算符。conv-type-inconv-type-out 中正好有一個必須是封閉類型(即,轉換運算符只能從它的封閉類型轉換為其他某個類型,或從其他某個類型轉換為它的封閉類型)。

運算符只能采用值參數,不能采用 ref 或 out 參數。

任何運算符聲明的前面都可以有一個可選的屬性(C# 編程指南)列表。

?

總結

以上是生活随笔為你收集整理的对象的比较与排序(五):C#运算符重载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。