C# 自定义 implicit和explicit转换
生活随笔
收集整理的這篇文章主要介紹了
C# 自定义 implicit和explicit转换
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
explicit 和 implicit 屬于轉(zhuǎn)換運算符,如用這兩者可以讓我們自定義的類型支持相互交換
explicti 表示顯式轉(zhuǎn)換,如從 A -> B 必須進行強制類型轉(zhuǎn)換(B = (B)A)
implicit 表示隱式轉(zhuǎn)換,如從 B -> A 只需直接賦值(A = B)
輸出:
explicti 表示顯式轉(zhuǎn)換,如從 A -> B 必須進行強制類型轉(zhuǎn)換(B = (B)A)
implicit 表示隱式轉(zhuǎn)換,如從 B -> A 只需直接賦值(A = B)
隱式轉(zhuǎn)換可以讓我們的代碼看上去更漂亮、更簡潔易懂,所以最好多使用 implicit 運算符。不過!如果對象本身在轉(zhuǎn)換時會損失一些信息(如精度),那么我們只能使用 explicit 運算符,以便在編譯期就能警告客戶調(diào)用
namespace OperatorTest {/// <summary>/// 豬/// </summary>public class Pig{public Pig(string name){this.Name = name;}public string Name;//explicit 關(guān)鍵字用于聲明必須使用強制轉(zhuǎn)換來調(diào)用的用戶定義的類型轉(zhuǎn)換運算符。//static explicit operator target_type { source_type identifier }//target_type 目標類型//source_type 源類型//identifier Something/*轉(zhuǎn)換運算符將源類型轉(zhuǎn)換為目標類型。源類型提供轉(zhuǎn)換運算符。與隱式轉(zhuǎn)換不同,必須通過強制轉(zhuǎn)換的方式來調(diào)用顯式轉(zhuǎn)換運算符。如果轉(zhuǎn)換操作可能導致異常或丟失信息,則應將其標記為 explicit。這可以防止編譯器無提示地調(diào)用可能產(chǎn)生無法預見后果的轉(zhuǎn)換操作*/public static implicit operator Pig(Monkey value){Pig mk = new Pig(value.Name + ":猴子變豬!!");return mk;}} namespace OperatorTest {/// <summary>/// 猴子/// </summary>public class Monkey{public Monkey(string name){this.Name = name;}public string Name;//implicit 關(guān)鍵字用于聲明隱式的用戶定義類型轉(zhuǎn)換運算符。//static implicit operator target_type { source_type identifier }public static explicit operator Monkey(Pig value){Monkey mk = new Monkey(value.Name + ":豬變猴子!!");return mk;}}調(diào)用:
Monkey monkey = new Monkey("悟空");//隱式轉(zhuǎn)換 猴子變豬Pig monkeyToPig = monkey;MessageBox.Show(monkeyToPig.Name);Pig pig = new Pig("八戒");//顯式轉(zhuǎn)換 豬變猴子Monkey pigToMonkey = (Monkey)pig;MessageBox.Show(pigToMonkey.Name);
輸出:
應用:
比如在實際操作中將一個對象A(或者一個實體)序列化成xml進行存儲,那么可以在該對象A的類中定義一個explicit operator,來實現(xiàn)將符合要求的xml內(nèi)容轉(zhuǎn)換為對象或者實體。
當然也可以在對象A的類中定義一個函數(shù)來實現(xiàn)這個處理,不過這樣有可能會多出一步,那就是當該函數(shù)不是靜態(tài)函數(shù)時,需要先實例化該對象來調(diào)用相應的處理函數(shù)。
參考:
explicit 關(guān)鍵字
implicit 關(guān)鍵字
operator 關(guān)鍵字
demo下載
總結(jié)
以上是生活随笔為你收集整理的C# 自定义 implicit和explicit转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [PHP] - 性能加速 - 开启opc
- 下一篇: 从容 IT 人生路,开发工具伴我行——“