考虑这种情况:从基类创建子类的克隆副本
public class Base
{
public int i;
}
public class Sub : Base
{
public void foo() { /* do stuff */}
}
然后我想,鉴于Base
一个实例得到的Sub
的克隆实例(与我在这种情况下= 17),使我可以在子类中调用foo
。
Base b = new Base { i=17 };
Sub s = CloneAndUpcast(b);
s.foo();
但是,如何创建CloneAndUpcast
?
我在想,是应该可以递归克隆所有的使用反射Base
- 成员和属性。但相当一些工作。
任何人有更好的,整洁的想法?
PS。我正在考虑使用这个场景是一个树状结构中的“简单”类(这里没有循环图或类似图),所有类都是简单的值持有者。计划是要有一个愚蠢的图层,它保存着所有的值,然后是一组相似的类(子类),它们实际上包含了价值持有者不应该知道的一些商业逻辑。通常不好的做法是。我认为它适用于这种情况。
你不能完全按照你所要求的。有很多原因,但即使可以,也足以说,这通常是一种不好的做法。如果您可以给我们提供您想要解决的更广泛的问题,我们可以帮助您找到正确的模式。 –
这听起来像是一个具体的问题,表明一个更普遍的问题正在被错误地解决。旧鞋和玻璃瓶都不合适。请参阅:http://weblogs.asp.net/alex_papadimoulis/archive/2005/05/25/408925.aspx – FMM
我认为你试图达到的目标*可能*表示设计问题。另外,由于'i'对于'base'类是私有的,所以'sub'无论如何都不能使用它,所以根据'Base'的工作原理,不需要复制该字段。 – tobsen