1
我嘗試創建繼承System.ICloneable接口的通用接口,但Clone()方法的返回類型是T.當然,T型需要約束要確定它是System.Object類的繼承,但下面的代碼不起作用。C#.NET中liskov原理的類型參數約束
public interface ICloneable<T> : System.ICloneable where T : object {
T Clone();
}
我在做什麼錯?
而且下面的約束不起作用:
- 其中T:System.Object的
- 其中T:類
我怎樣才能使用Liskov的原則在此情況下說你可以縮小你的回報類型,解決這個問題?
P.S .:對不起,我的英文,如果我犯了錯誤。我不是以英語爲母語的人。
沒有必要爲你的英語找藉口,這很好。 – 2009-07-15 12:13:02
順便提一下,我建議你將T類型標記爲協變(在它之前放置單詞「out」),並且還要添加一個只讀屬性「T self」,否則定義一個接口ISelf以只讀財產「T自我」。請注意,T不應限制爲ICloneable 也不是ISelf 。如果你這樣做,可以有沒有公共克隆方法的類Foo和DerivedFoo,以及派生自這些類的CloneableFoo和CloneableDerivedFoo,並且接受Foo的任何可複製派生作爲ICloneable ,即使這樣的可克隆衍生物不共享基類。 –
supercat
2011-08-08 20:33:53