我相信這一定是重複的,但我無法找到答案:尋找克隆()實現與得到的返回類型
如果我有兩類:
public class BASE
{
public BASE() {};
public abstract BASE clone();
}
public class CHILD : BASE
{
public CHILD() : base() {}
public override BASE clone()
{
return new CHILD();
}
}
我有每次我想克隆一個像CHILD類型的對象時進行顯式轉換:
var a = new CHILD();
CHILD b = a.clone() as CHILD;
有沒有辦法避免這種轉換? 我希望能寫:
var original = new CHILD();
BASE copy1 = original.clone();
CHILD copy2 = original.clone();
這是可能的C#?
由於多態性,我認爲可以用BASE而不是'CHILD'。你爲什麼想要'CHILD'類型?但有一種方法可以做到這一點,雖然...使用方法*隱藏*而不是方法*覆蓋* – Ian
多態性允許我寫'CHILD c = new CHILD(); BASE b = c'但不是相反。我無法將'BASE'對象分配給'CHILD'變量。這就是爲什麼當我克隆CHILD時,我總是必須進行轉換。 –
我看,在這種情況下,使用'generic'是你的選擇 – Ian