考慮這種情況:從基類創建子類的克隆副本
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