public class C
{
public T Data;
}
public class C : C
{
}
public C c1;
public C c2;
上面的c1無法轉換成c2,但我就是有這種需求…可能是我設計的不好 …
我的Interface中訂了 C Query(string str);
在各個實作介面的物件中,回傳是各種C ,C等等…
因為要統一在外面接到就直接把C轉成Json字串,
所以需要C能正常轉型成C。
最後是在C裡面實做implicit(隱含轉換)
public class C
{
public T Data;
public static implicit operator C ( C cc )
{
var obj = new C ();
obj.Data = cc.Data;
return obj;
}
}
這樣c2 = c1;的時候就不會出錯了!
隱含轉換的準則:
- 不會拋出例外
- 不會遺失資訊
所以其他程式設計人員可以不用注意這個東西直接拿來使用。
相對來說,如果希望其他程式設計人員在做轉型時可以注意到會有差異,希望他有認知到有做轉型的動作,
那實做的implicit關鍵字要改成explicit這樣在轉換的時候必須加上轉型關鍵字,寫成
c2 = (C)c1;
沒有留言:
張貼留言