将一个类转换为另一个类(我假设你在谈论运行时转换)可能不是必要的方法。例如,如果您有要从方法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