C# 自訂 implicit和explicit轉換

來源:互聯網
上載者:User
explicit 和 implicit 屬於轉換運算子,如用這兩者可以讓我們自訂的類型支援相互交換
explicti 表示顯式轉換,如從 A -> B 必須進行強制類型轉換(B = (B)A)
implicit 表示隱式轉換,如從 B -> A 只需直接賦值(A = B)

隱式轉換可以讓我們的代碼看上去更漂亮、更簡潔易懂,所以最好多使用 implicit 運算子。不過!如果對象本身在轉換時會損失一些資訊(如精度),那麼我們只能使用 explicit 運算子,以便在編譯期就能警告客戶調用

namespace OperatorTest{    /// <summary>    /// 豬    /// </summary>    public class Pig    {        public Pig(string name)        {            this.Name = name;        }        public string Name;        //explicit 關鍵字用於聲明必須使用強制轉換來調用的使用者定義的類型轉換運算子。        //static explicit operator target_type { source_type identifier }        //target_type 目標類型        //source_type 源類型        //identifier Something        /*轉換運算子將源類型轉換為目標類型。源類型提供轉換運算子。與隱式轉換不同,必須通過強制轉換的方式來調用顯式轉換運算子。如果轉換操作可能導致異常或丟失資訊,則應將其標記為 explicit。這可以防止編譯器無提示地調用可能產生無法預見後果的轉換操作*/        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 關鍵字用於聲明隱式的使用者定義型別轉換運算子。        //static implicit operator target_type { source_type identifier }        public static explicit operator Monkey(Pig value)        {            Monkey mk = new Monkey(value.Name + ":豬變猴子!!");            return mk;        }    }

調用:


 Monkey monkey = new Monkey("悟空");            //隱式轉換 猴子變豬            Pig monkeyToPig = monkey;            MessageBox.Show(monkeyToPig.Name);            Pig pig = new Pig("八戒");            //顯式轉換 豬變猴子            Monkey pigToMonkey = (Monkey)pig;            MessageBox.Show(pigToMonkey.Name);


輸出:




應用:
比如在實際操作中將一個對象A(或者一個實體)序列化成xml進行儲存,那麼可以在該對象A的類中定義一個explicit operator,來實現將符合要求的xml內容轉換為對象或者實體。
當然也可以在對象A的類中定義一個函數來實現這個處理,不過這樣有可能會多出一步,那就是當該函數不是靜態函數時,需要先執行個體化該對象來調用相應的處理函數。


參考:

explicit 關鍵字

implicit 關鍵字

operator 關鍵字


demo下載

以上就是C# 自訂 implicit和explicit轉換的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.