クラスが実装されている場合、ICloneable
それはどういう意味ですか?
4 に答える
それがIClonable.Clone
方法です。ドキュメントには、このメソッドはオブジェクトのクローンを作成することを目的としていると記載されています。ドキュメントには、クローンは深くても浅くてもよいと具体的に記載されています。結果として得られる型は、複製されるオブジェクトと同じ型でなければならないことにも注意してください。ただし、型システムでは、実際にそうであるという保証はありません。
要約すると、それはそれほど難しい約束を提供しませんが、意図は独立したクローンを作成することです。
基本的には、クラスのクローンを作成するだけです。
http://msdn.microsoft.com/en-us/library/system.icloneable.aspx
インターフェイスを実装するときは、そのインターフェイスでメソッドを定義する必要があります。この場合、Cloneメソッドをクラスで定義する必要があります。
Microsoftの例:
public object Clone()
{
return this.MemberwiseClone();
}
これは、クラスがオブジェクトを返すメソッドを実装する必要があることを意味しClone
ます。それ以上ではありません。したがって、ICloneableを受け入れるメソッドを作成してから、そのオブジェクトのクローンを作成できます。
ICloneable自体は意味がありませんが、他の制約と組み合わせて使用すると便利な場合があります(たとえば、パラメーターがICloneableを実装するFooでなければならないことを指定できます)。したがって、Foo、CloneableFoo、AdvancedFoo、およびCloneableAdvancedFooを使用して、クローンをサポートするFoo派生物をサポートしないものと区別できるようにするだけでなく、クローン可能なFooがFooのクローン可能な派生物を受け入れることを期待するルーチンを許可することもできます。
残念ながら、IClonableおよびFoo制約で渡された関数パラメーターは、型キャストなしでIClonableおよびFooとして使用できますが、そのような基準を満たすフィールドを作成する方法も、フィールドを型キャストする方法もありません。これに対する解決策は、Tを返す「Clone」メソッドとTを返す「Self」メソッドを含むICloneable(Of T As ICloneable(Of T))を作成することです(したがって、「 ICloneable Of Foo "は、" Self "メソッドを介してFooとしてアクセスできます)。これをすべて機能させるには少し注意が必要ですが、パターンはかなり良いはずです。