3

クラスが実装されている場合、ICloneableそれはどういう意味ですか?

4

4 に答える 4

6

それがIClonable.Clone方法です。ドキュメントには、このメソッドはオブジェクトのクローンを作成することを目的としていると記載されています。ドキュメントには、クローンは深くても浅くてもよいと具体的に記載されています。結果として得られる型は、複製されるオブジェクトと同じ型でなければならないことにも注意してください。ただし、型システムでは、実際にそうであるという保証はありません。

要約すると、それはそれほど難しい約束を提供しませんが、意図は独立したクローンを作成することです。

于 2010-11-28T14:44:40.803 に答える
0

基本的には、クラスのクローンを作成するだけです。

http://msdn.microsoft.com/en-us/library/system.icloneable.aspx

インターフェイスを実装するときは、そのインターフェイスでメソッドを定義する必要があります。この場合、Cloneメソッドをクラスで定義する必要があります。

Microsoftの例:

public object Clone()
{
    return this.MemberwiseClone();
}
于 2010-11-28T14:40:35.393 に答える
0

これは、クラスがオブジェクトを返すメソッドを実装する必要があることを意味しCloneます。それ以上ではありません。したがって、ICloneableを受け入れるメソッドを作成してから、そのオブジェクトのクローンを作成できます。

于 2010-11-28T14:42:20.413 に答える
0

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としてアクセスできます)。これをすべて機能させるには少し注意が必要ですが、パターンはかなり良いはずです。

于 2010-11-30T17:31:47.413 に答える