int i = (int)123.456;
如果今天我們分別自訂了兩個無任何繼承關係的類別
要如何達成強制轉換呢?
ClassA x = new ClassA();
ClassB y = (ClassB)x;
在C#中可以使用implicit operator關鍵字來達成
這裡舉個簡單的例子,兩個類別的定義如下
class ClassA
{
public int Amount = 0;
public ClassA(int amount) { this.Amount = amount; }
}
class ClassB
{
public string Content = string.Empty;
public ClassB(string content) { this.Content = content;}
}
下面要示範的是,當ClassA強轉成ClassB時
ClassB.Content的字串,會是ClassA.Amount數個英文字母
假設ClassA.Amount等於10,則強轉後ClassB.Content會等於ABCDEFGHIJ
在ClassB中加入以下程式碼
public static implicit operator ClassB(ClassA obj)
{
int amount = 0;
if (obj.Amount > 26 || obj.Amount < 0)
throw new Exception("out of range");
else
amount = obj.Amount;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < amount; i++)
sb.Append((char)(67 + i));
ClassB result = new ClassB(sb.ToString());
return result;
}
現在我們可以執行強轉了
static void Main(string[] args)
{
ClassA a = Class(10);
ClassB b = (ClassB)a;
Console.WriteLine(b.Content);
Console.Read();
}
沒有留言:
張貼留言