假设我有两个具有相同接口的类:
interface ISomeInterface { int foo{get; set;} int bar{get; set;} } class SomeClass : ISomeInterface {} class SomeOtherClass : ISomeInterface {}
假设我有一个表示SomeClass的ISomeInterface实例.有没有一种简单的方法可以将其复制到SomeOtherClass的新实例中而无需手动复制每个成员?
更新: 对于记录,我不是试图将SomeClass的实例强制转换为SomeOtherClass的实例.我想做的是这样的事情:
ISomeInterface sc = new SomeClass() as ISomeInterface; SomeOtherClass soc = new SomeOtherClass(); soc.foo = sc.foo; soc.bar = soc.bar;
我只是不想为每个人手动执行此操作,因为这些对象具有许多属性.
您可以在每个类中创建隐式运算符以进行转换:
public class SomeClass { public static implicit operator SomeOtherClass(SomeClass sc) { //replace with whatever conversion logic is necessary return new SomeOtherClass() { foo = sc.foo, bar = sc.bar } } public static implicit operator SomeClass(SomeOtherClass soc) { return new SomeClass() { foo = soc.foo, bar = soc.bar } } //rest of class here }
然后SomeOtherClass soc = sc;
反之亦然.
接口的重点不是不必这样做吗?您是否正在使用SomeOtherClass的具体实现?使用界面而不是使用具体实现,如果您使用SomeClass或SomeOther类则无关紧要.
除此之外,您可以做的最好的事情是编写某种辅助函数(您仍然需要手动执行,或查看反射),复制接口上的每个属性,如下所示:
public ISomeInterface CopyValues(ISomeInterface fromSomeClass, ISomeInterface toSomeOtherClass) { //copy properties here return toSomeOtherClass; }
然而,我的第一直觉是说远离实现并使用你的界面集中精力,那么下面的内容并不重要.