質問
クラスが実装された場合 ICloneable
, 、 どういう意味ですか?
解決
それがあります IClonable.Clone
方法。ドキュメントには、この方法はオブジェクトをクローンすることを目的としていると書かれています。ドキュメントは、クローンが深いまたは浅いものになる可能性があることを特に指摘しています。また、結果のタイプにも注目されています しなければならない クローン化されたオブジェクトと同じタイプであるが、タイプシステムには実際にそうであるという保証はありません。
要約すると、それはそれほど難しい約束を提供しませんが、目的は独立したクローンを作成することです。
他のヒント
クラスがメソッドを実装する必要があることを意味します Clone
それはオブジェクトを返しますが、それ以上ではありません。したがって、iClonableを受け入れるメソッドを使用して、そのオブジェクトをクローンすることができます。
基本的に、クラスをクローン化するだけです。
http://msdn.microsoft.com/en-us/library/system.iclonable.aspx
インターフェイスを実装する場合、そのインターフェイス内のメソッドを定義する必要があります。この場合、クローン法はクラスで定義する必要があります。
Microsoftの例:
public object Clone()
{
return this.MemberwiseClone();
}
iClonableはそれ自体では意味がありませんが、他の制約と組み合わせて役立つ場合があります(たとえば、パラメーターがiClonableを実装するFooでなければならないことを提供できます)。したがって、Foo、cloneablefoo、advancedfoo、およびcloneableadvancedfooを持つことができ、クローニングをサポートするフー派生物を、そうでないものと区別することができますが、クローン可能なfooがfooのクローン可能な誘導体を受け入れることを期待するルーチンを可能にすることもできます。
残念ながら、iClonableおよびFOOの制約で渡された関数パラメーターは、タイプキャストなしではiClonableおよびFooとして使用される場合がありますが、そのような基準を満たすフィールドを作成する方法も、フィールドをタイプキャストする方法もありません。これの治療法は、tを返す「クローン」メソッドを含む(iclonable(t of t)としてのtのiclonable)と、tを返す「自己」メソッド(したがって、フィールドを保持するフィールド」を作成することです。 fooのiClonable "には、「自己」メソッドを介してfooとしてアクセスできます)。これをすべて機能させるには少し注意が必要ですが、パターンは非常に良いはずです。