【发布时间】:2010-07-23 14:44:14
【问题描述】:
例如,如果我有两个对象,一个是 Monkey 类型,另一个是 Dog 类型,它们都实现了 IAnimal,如下所示:
interface IAnimal
{
int numberOfEyes {get; set;}
string name {get; set;}
}
我想做这样的事情:
Monkey monkey = new Monkey() { numberOfEyes = 7, name = "Henry" };
Dog dog = new Dog();
MyFancyClass.DynamicCopy(monkey, dog, typeof(IAnimal));
Debug.Assert(dog.numberOfEyes == monkey.numberOfEyes);
我想可以使用反射创建一个像 MyFancyClass 这样的类...任何聪明的人都有想法?
谢谢, 斯蒂芬
【问题讨论】:
-
你完全可以使用反射来做到这一点。这也是一个非常糟糕的主意。我认为在这种情况下,解释你为什么要这样做可以让人们帮助你找到更好的解决方案。
-
顺便说一句:您可以在接口中定义属性,但不能在字段中定义(如您的代码示例中所示)。在您的情况下,所有属性都应同时具有
set和get访问器。 -
您使用的是 .NET 4 吗?最新框架中有更多强大的 ExpressionTree 选项,它们可以提供性能良好的基于反射的解决方案。
-
jdmichal ...出于懒惰...与其拥有一堆interface1.value = interface2.value,我更喜欢动态的方式来做这件事。 stakx ... yip .. 我忘记了 { set;得到; } ...哎呀 :) Greg - .Net 3.5