常使用阿拉伯數字1234567890
但想要有一天在寫code時
輸入int i = 1234567890
自動幫你轉成一二三四五六七八九零
這時候可以使用[explicit,implicict] + operator 轉換關鍵字
來實作功能
void Main()
{
int_zh_tw obj_test = 1234567890;
Console.WriteLine(obj_test.Value);
}
class int_zh_tw
{
public string Value { get; set; }
public static implicit operator int_zh_tw(int inValue)
{
var str_int = inValue.ToString().Replace("1","一").Replace("2","二").Replace("3","三").Replace("4","四").Replace("5","五")
.Replace("6","六").Replace("7","七").Replace("8","八").Replace("9","九").Replace("0","零");
return new int_zh_tw() {
Value = str_int
};
}
}
static operator 類別名稱
的建構式(圖1)想更進一步了解,可以帶MSDN了解
Conversion Keywords (C# Reference)
public static implicit operator int_zh_tw(int inValue) {...}
上面這句代碼,是去定義(int_zh_tw)這個implicit operator,而static就讓這個method可以直接被乎叫(無須付屬於object)。
(int_zh_tw)這個implicit operator是用來做type casting,把在integer裏的阿拉佰數字,轉換成在string裏的中文數字。
int_zh_tw obj_test = 1234567890; // 隱藏了(int_zh_tw)這個implicit operator
相等於
int_zh_tw obj_test = (int_zh_tw) 1234567890; // 用了(int_zh_tw)這個explicit operator
上面這句代碼,是隱藏了(int_zh_tw)這個implicit operator,去乎叫int_zh_tw(int inValue)這個method,然後把它的傳回值,送到obj_test。
Console.WriteLine(obj_test);
上面這句代碼,應該是obj_test.Value。
謝謝補充
應該是要
Console.WriteLine(obj_test.Value);
才對
直接列印會印出類別
謝謝,我這邊修正了
LINQPAD會直接把類別+Value顯示,讓我忽略這件事。