久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

 流年的熊 2010-10-26

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

operator

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

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

注意

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

explicit

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

static explicit operator target_type { source_type identifier }

參數(shù)

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

注意

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

implicit

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

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

示例

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

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

我們會(huì)發(fā)現(xiàn)r4結(jié)果少了一分錢!這是因?yàn)樵冢?/p>

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

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

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

不過使用System.Convert處理會(huì)有些性能的損失,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多