当前位置:  开发笔记 > 编程语言 > 正文

使用接口将对象从一种类型转换为另一种类型?

如何解决《使用接口将对象从一种类型转换为另一种类型?》经验,为你挑选了2个好方法。

假设我有两个具有相同接口的类:

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;

我只是不想为每个人手动执行此操作,因为这些对象具有许多属性.



1> Adam Lassek..:

您可以在每个类中创建隐式运算符以进行转换:

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;反之亦然.



2> 小智..:

接口的重点不是不必这样做吗?您是否正在使用SomeOtherClass的具体实现?使用界面而不是使用具体实现,如果您使用SomeClass或SomeOther类则无关紧要.

除此之外,您可以做的最好的事情是编写某种辅助函数(您仍然需要手动执行,或查看反射),复制接口上的每个属性,如下所示:

   public ISomeInterface CopyValues(ISomeInterface fromSomeClass, ISomeInterface toSomeOtherClass)
   {
    //copy properties here
    return toSomeOtherClass;
    }

然而,我的第一直觉是说远离实现并使用你的界面集中精力,那么下面的内容并不重要.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有