回答:
すべきではない。メソッドが "ディープ"または "シャロー"のどちらのクローンを実行するICloneable
かがインターフェイスから明確に示されていないため、マイクロソフトでは実装しないことをお勧めしますClone
。
詳細については、2003年のBrad Abramsによるこのブログ投稿(!)を参照してください。
ICloneable
インタフェースそれ自体では、実際にそれがオブジェクトはそれについて何も知らずに複製可能であることを知っておくと便利です多くの状況が存在していないと言うことである、非常に有用ではありません。これは、eg IEnumerable
やとは非常に異なる状況IDisposable
です。それIEnumerable
を列挙する方法以外の何も知らずにを受け入れることが役立つ多くの状況があります。
一方、他のICloneable
制約と一緒に一般的な制約として適用すると便利です。たとえば、基本クラスは、いくつかの派生物を効果的にサポートする場合があり、その一部は効果的に複製でき、一部はできません。ベースタイプ自体がパブリッククローンインターフェイスを公開している場合、クローンを作成できなかった派生タイプは、リスコフの置換原則に違反します。この問題を回避する方法は、基本型にProtectedメソッドを使用した複製をサポートさせ、派生型がパブリッククローンインターフェイスを適切に実装できるようにすることです。
それが完了すると、WonderfulBase
型のオブジェクトを受け入れ、それを複製できるようにする必要があるメソッドをコーディングして、複製をサポートするWonderfulBaseオブジェクトを受け入れるようにコーディングできます(基本型とICloneable
制約のあるジェネリック型パラメーターを使用) 。がICloneable
インタフェース自体が深い又は浅いクローンを示さないであろう、のドキュメントは、WonderfulBase
複製可能かどうかを示すことになるWonderfulBase
ディープまたは浅いクローニングしなければなりません。基本的に、ICloneable
インターフェイスはICloneableWonderfulBase
、を定義しても達成できないことは何も達成しませんが、クローン可能な基本クラスごとに異なる名前を定義する必要がありません。