国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C# 參考之轉(zhuǎn)換關(guān)鍵字:operator、explicit與implicit

C# 參考之轉(zhuǎn)換關(guān)鍵字:operator、explicit與implicit

operator

operator 關(guān)鍵字用于在類或結(jié)構(gòu)聲明中聲明運算符。運算符聲明可以采用下列四種形式之一:

  1. public static result-type operator unary-operator ( op-type operand )
  2. public static result-type operator binary-operator (    op-type operand,    op-type2 operand2    )
  3. public static implicit operator conv-type-out ( conv-type-in operand )
  4. public static explicit operator conv-type-out ( conv-type-in operand )

參數(shù)

  1. result-type 運算符的結(jié)果類型。
  2. unary-operator 下列運算符之一:+ - ! ~ ++ — true false
  3. op-type 第一個(或唯一一個)參數(shù)的類型。
  4. operand 第一個(或唯一一個)參數(shù)的名稱。
  5. binary-operator 其中一個:+ - * / % & | ^ << >> == != > < >= <=
  6. op-type2 第二個參數(shù)的類型。
  7. operand2 第二個參數(shù)的名稱。
  8. conv-type-out 類型轉(zhuǎn)換運算符的目標(biāo)類型。
  9. conv-type-in 類型轉(zhuǎn)換運算符的輸入類型。

注意

  1. 前兩種形式聲明了用戶定義的重載內(nèi)置運算符的運算符。并非所有內(nèi)置運算符都可以被重載(請參見可重載的運算符)。op-type 和 op-type2 中至少有一個必須是封閉類型(即運算符所屬的類型,或理解為自定義的類型)。例如,這將防止重定義整數(shù)加法運算符。
  2. 后兩種形式聲明了轉(zhuǎn)換運算符。conv-type-in 和 conv-type-out 中正好有一個必須是封閉類型(即,轉(zhuǎn)換運算符只能從它的封閉類型轉(zhuǎn)換為其他某個類型,或從其他某個類型轉(zhuǎn)換為它的封閉類型)。
  3. 運算符只能采用值參數(shù),不能采用 refout 參數(shù)。
  4. C# 要求成對重載比較運算符。如果重載了==,則也必須重載!=,否則產(chǎn)生編譯錯誤。同時,比較運算符必須返回bool類型的值,這是與其他算術(shù)運算符的根本區(qū)別。
  5. C# 不允許重載=運算符,但如果重載例如+運算符,編譯器會自動使用+運算符的重載來執(zhí)行+=運算符的操作。
  6. 運算符重載的其實就是函數(shù)重載。首先通過指定的運算表達式調(diào)用對應(yīng)的運算符函數(shù),然后再將運算對象轉(zhuǎn)化為運算符函數(shù)的實參,接著根據(jù)實參的類型來確定需要調(diào)用的函數(shù)的重載,這個過程是由編譯器完成。
  7. 任何運算符聲明的前面都可以有一個可選的屬性(C# 編程指南)列表。

explicit

explicit 關(guān)鍵字用于聲明必須使用強制轉(zhuǎn)換來調(diào)用的用戶定義的類型轉(zhuǎn)換運算符。

static explicit operator target_type { source_type identifier }

參數(shù)

  1. target_type 目標(biāo)類型
  2. source_type 源類型。
  3. identifier Something。

注意

  1. 轉(zhuǎn)換運算符將源類型轉(zhuǎn)換為目標(biāo)類型。源類型提供轉(zhuǎn)換運算符。與隱式轉(zhuǎn)換不同,必須通過強制轉(zhuǎn)換的方式來調(diào)用顯式轉(zhuǎn)換運算符。如果轉(zhuǎn)換操作可能導(dǎo)致異?;騺G失信息,則應(yīng)將其標(biāo)記為 explicit。這可以防止編譯器無提示地調(diào)用可能產(chǎn)生無法預(yù)見后果的轉(zhuǎn)換操作。

implicit

implicit 關(guān)鍵字用于聲明隱式的用戶定義類型轉(zhuǎn)換運算符。

static implicit operator target_type { source_type identifier }
注意
  1. 隱式轉(zhuǎn)換可以通過消除不必要的類型轉(zhuǎn)換來提高源代碼的可讀性。但是,因為可以在程序員未指定的情況下發(fā)生隱式轉(zhuǎn)換,因此必須注意防止令人不愉快的后果。一般情況下,隱式轉(zhuǎn)換運算符應(yīng)當(dāng)從不引發(fā)異常并且從不丟失信息,以便可以在程序員不知曉的情況下安全使用它們。如果轉(zhuǎn)換運算符不能滿足那些條件,則應(yīng)將其標(biāo)記為 explicit。

示例

以下是一個綜合示例,簡要展示用法。如要更具體細節(jié)的了解,請參閱MSDN Library。

// keywords_operator.cs
/*
控制臺輸出:
r3 = ¥48元6角6分
float f = 48.66
r4 = ¥48元6角5分
*/

我們會發(fā)現(xiàn)r4結(jié)果少了一分錢!這是因為在:

uint fen = (uint)(((f - yuan) * 100% 10);

這句中,在將float轉(zhuǎn)換為uint時發(fā)生了圓整錯誤(這與計算機以二進制存儲有關(guān))。解決這個錯誤,我們可以使用System.Convert類中用于處理數(shù)字的靜態(tài)方法:

uint fen = Convert.ToUInt32(((f - yuan) * 100% 10);

不過使用System.Convert處理會有些性能的損失。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
運行符和強制類型轉(zhuǎn)換
C++_運算符重載
Explicit
c++運算符重載總結(jié)
c++轉(zhuǎn)換構(gòu)造函數(shù)與類型轉(zhuǎn)換函數(shù)
More Effective C++ (M1 -to- M8)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服