System.ICloneableインターフェイスを継承する汎用インターフェイスを作成しようとしますが、Clone()メソッドの戻り型はTです。もちろんT型には制約が必要ですこれがSystem.Objectクラスの継承であることを確認するには、次のコードは機能していません。C#.NETのliskov原則の型パラメータの制約
public interface ICloneable<T> : System.ICloneable where T : object {
T Clone();
}
私は間違っていますか?
また、以下の制約が動作しません:
- T:クラス
どのように私はこのケースではリスコフ原理を使用することができます:TはSystem.Objectの
P.S .:私が間違いを犯した場合、私の英語には申し訳ありません。私は英語のネイティブスピーカーではありません。
英語を言い訳する必要はありません。 –
ちなみに、私はT型を共変変数としてマークし(その前に単語を "出"してください)、読み取り専用のプロパティ "T self"を追加するか、またはインターフェイスISelf を読み取り専用で定義することをお勧めしますプロパティ "T self"。 TはICloneableでもISelf でもないことに注意してください。これを行うと、公開クローンメソッドを持たないクラスFooとDerivedFoo、およびそれらから派生するクラスCloneableFooとCloneableDerivedFooを持つことができます。そのようなクローン化可能な派生クラスに共通の基底クラスを持たない場合でもFooのすべての派生派生をICloneable として受け入れることができます。 –
supercat