型別轉換 explicit、implicit 以及 operator

型別轉換 explicit、implicit 以及 operator

Technorati 的標籤: ,,,

 

第一次接觸這兩個關鍵字,做一下筆記比較不會忘記

 

explicit 關鍵字會宣告必須以轉型 (cast) 叫用的使用者定義型別轉換運算子。

 

 

implicit 關鍵字是用來宣告隱含的使用者定義型別轉換運算子。 使用它可啟用使用者定義型別和其他型別之間的隱含轉換,但前提是要保證轉換作業不會導致資料的遺失。

 

 

operator 關鍵字可在類別或結構 (Struct) 宣告內多載內建運算子或提供使用者定義的轉換。

 

 

定義型別:

        {
            private string _Value;

            //將建構子設為私有,代表無法用new關鍵字 
            private MyString(string value)
            {
                _Value = value.Trim();
            }

            //隱含轉換 接受string型別
            public static implicit operator MyString(string expandedName)
            {
                return new MyString(expandedName);
            }

            //明確轉換,接受一個StringBuilder型別
            public static explicit operator MyString(StringBuilder expandedName)
            {
                return new MyString(expandedName.ToString());
            }

            //隱含轉換 回傳string型別
            public static implicit operator string(MyString me)
            {
                return me._Value;
            }


            public override string ToString()
            {
                return _Value;
            }
        }

 

測試CODE:

            StringBuilder sb = new StringBuilder("Hello a2");

            MyString str1 = "123 ";     //字尾有空白

            this.Label1.Text = str1;    //隱含轉型,將MyString轉成String。回傳"123"字尾空白已經被移除

            string x1 = str1;           //隱含轉型,將String轉成MyString。

            MyString s2 = (MyString)sb; //明確轉型,將StringBuilder轉成MyString。

 

參考資料:

https://gist.github.com/robinli/9459a899089e64368198

http://msdn.microsoft.com/zh-tw/library/s53ehcz3.aspx

http://www.dotblogs.com.tw/lastsecret/archive/2011/11/14/57875.aspx