會不會有任何缺點?接口中的方法返回動態
現有的代碼不會因爲它而被改變,因爲底層類型仍然是相同的,它會使代碼略少。
public class MyClass : IClonable
{
//...
public object Clone()
{
//...
return new MyClass(...);
}
}
MyClass foo = new MyClass(...);
MyClass bar = foo.Clone() as MyClass;
唯一減少到上面的代碼正在改變FOO和酒吧到變種的聲明的詳細程度。現在
,如果IClonable.Clone()返回動態相反,基礎類(在運行時)仍然會MyClass的,但代碼會變得稍微更簡潔:
MyClass foo = new MyClass(...);
MyClass bar = foo.Clone();
這樣的改變會有什麼不利嗎?
只有當您使用'null'檢查時,才應使用'as'。如果您不想這樣做,請使用投射,例如'MyClass bar =(MyClass)foo.Clone();'。 – svick
另外,我認爲這裏的正確解決方案是完全避免使用ICloneable,而不是試圖解決它的問題。 – svick