將一個類轉換爲另一個類(我假設你在談論運行時轉換)可能不是必要的方法。例如,如果您有要從方法C調用的每個都具有void Blah()
的類X和類Y,並且方法C將X作爲參數,則您可能會做的是爲X和Y提取一個通用接口,然後C改爲接受界面。因此,你的Y可以保持Y.
另一種選擇是使用適配器模式它可以使Ÿ符合X的提取接口,這是特別有用,如果Y具有大致相同的功能,但使用不同的名稱,或者如果改變其中一個類的代碼是痛苦的,不可能的或者僅僅是不希望的。
一個例子,給出
interface ICanBlah { void Blah(); }
class X : ICanBlah { public void Blah() { } }
class Y { public void Blahhhhh() { } }
你可以寫
public class YBlahAdapter : ICanBlah
{
Y itsY;
public YBlahAdapter(Y y) { itsY = y; }
public void Blah() { itsY.Blahhhhh(); }
}
因此,無論你有需要ICanBlah
的方法,你有Y
類型的對象,你可以在一個適配器把它包然後將適配器傳遞給該方法。另一方面,如果您確實想將X運行時轉換爲Y或將Y運行爲X,則可以爲其中一個或兩個定義隱式或顯式轉換運算符。
public static explicit operator Y(X x) { /* build and return Y from X */ }
(此操作將需要的類型之一的源文件中聲明。)
你能提供的這些類的2個例子嗎?我懷疑你可以從那些有很多共同點的基類中提取基類,並讓它們都從基類繼承。 – CodingWithSpike