c# 運算子多載

來源:互聯網
上載者:User

標籤:class   過程   implicit   執行   編譯   ret   必須   運算子多載   pretty   

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-type 和 op-type2 中至少有一個必須是封閉類型(即運算子所屬的類型,或理解為自訂的類型)。例如,這將防止重定義整數加法運算子。

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

運算子只能採用值參數,不能採用 ref 或 out 參數。

C# 要求成對重載比較子。如果重載了==,則也必須重載!=,否則產生編譯錯誤。同時,比較子必須返回bool類型的值,這是與其他算術運算子的根本區別。

C# 不允許重載=運算子,但如果重載例如+運算子,編譯器會自動使用+運算子的重載來執行+=運算子的操作。

運算子多載的其實就是函數重載。首先通過指定的運算運算式調用對應的運算子函數,然後再將運算對象轉化為運算子函數的實參,接著根據實參的類型來確定需要調用的函數的重載,這個過程是由編譯器完成。

c# 運算子多載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.