型別轉換 explicit、implicit 以及 operator
第一次接觸這兩個關鍵字,做一下筆記比較不會忘記
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