这只是一个“过度好奇”的问题,所以我不能提供基于当前问题的真实世界示例,但是一些虚拟代码就足够了。我想知道的是,是否有一种直接(特别快)的方法将对象的实例映射到'this'(完全相同类型的当前实例,可以访问私有成员等)。 p>
public class MyObject {
public MyObject(MyObject other) {
// of course, won't work
this = other;
}
}
我所见过的所有示例和操作方法都过度使用了反射,甚至构建完整的表达式树或使用像Automapper这样的框架,当这个想法看起来“相当微不足道”时,所有这些都有其自身的局限性。为什么不能将所有指针/引用等从内存中的一个位置复制到另一个位置,因为分配的空间等完全相同?
答案 0 :(得分:1)
如果可行,您只需通过新引用引用other
,但不要将其内容复制到MyObject
的新实例。因此,构造函数只会返回对现有实例的新引用。您需要的是MyObject
的全新实例,不是吗?所以你必须使用它的一个构造函数创建一个。如果你有一个复制构造函数来实现这一点你很好:
public class MyObject {
public MyObject(MyObject other) {
this.Prop1 = other.Prop1;
}
}
当然有一些较短的(但不是必需的保护程序)appraoches - 例如使用反射并简单地将所有属性值从一个实例复制到另一个实例。但是,基本上你仍然可以通过适当地设置其成员来创建一个全新的实例。
反射代码可能与此类似:
public class MyObject {
public MyObject(MyObject other) {
var props = typeof(MyObject).GetProperties();
foreach(var p in props)
{
p.SetValue(this, p.GetValue(other));
}
}
}
但是,这仅适用于公共属性,您必须对字段以及私有或内部成员执行此操作。
答案 1 :(得分:1)
AFAIK,对于自己的实例(这个),没有直接的方法。我想,将数据从另一个实例复制到此就足够了。对于您来说可能是另一种选择是使用静态实例,但如果您需要使用多个实例,这有一些特殊性。
public class MyObject {
private static MyObject _instance;
public static MyObject Instance
{
get { return _instance; }
set { _instance = value; }
} }
PS:我是从我的手机上写过这篇文章的,所以请原谅我,如果你遇到小错误,因为我在发布之前无法测试它。我会在我能够测试代码后立即更新帖子。