ホームページ > バックエンド開発 > C#.Net チュートリアル > .NET Framework-Cloneについて詳しく紹介してください

.NET Framework-Cloneについて詳しく紹介してください

黄舟
リリース: 2017-03-18 13:16:53
オリジナル
1781 人が閲覧しました

.NET には、IClonable インターフェイスを実装するオブジェクトが多数あります。つまり、ArrayList オブジェクト (データ構造 3: ArrayList を記述するには C# を使用します) などのコピー関数を実装したり、独自の IClonable インターフェイス オブジェクト。

ArrayList の Clone メソッドの概要をご覧ください:

System.Collections.ArrayList の浅いコピーを作成します。

msdn で確認したところ、浅いコピーの概念に非常に興味があります。説明が少しわかりにくいです。コレクションの浅いコピーとは、要素が値型であるかどうかに関係なく、コレクションの要素をコピーすることだけを指します。または reference 型ですが、Clone はコピーしません。オブジェクト (参照が指すオブジェクト) がコピーされます。新しく複製されたコレクションでは、参照は依然として同じオブジェクト (元のコレクションの参照が指すオブジェクト) を指します。

コレクションの浅いコピーは、参照型であるか値型であるかに関係なく、コレクションの要素のみをコピーしますが、新しいコレクション内の参照が同じオブジェクトを指しているオブジェクトはコピーしません。 that thereferences in theoriginal collection point to.

Cloneで実装されるいわゆる浅いコピーを一言で言うと、Cloneで生成されたオブジェクトは値の型と参照をコピーしますが、参照オブジェクトはコピーしません。この時点で、参照オブジェクトがコピーされないということは何を意味するのか、疑問に思うかもしれません。この問題は、以下のコードを参照してください。

新しい ArrayList オブジェクトを作成し、それを参照オブジェクトと値型データとしてそれぞれ追加します

             //ArrayList对象
            ArrayList arr1 = new ArrayList();            
            //Person对象创建,xiaoming引用Person对象
            Person xiaoming = new Person("xiaoming",new ContactInfo("shanghai","18011113333"));            
            //arr1引用xiaoming,这样arr1[0]也引用了Person对象
            arr1.Add(xiaoming);            
            //arr1中添加值类型整形5元素
            arr1.Add(5);
ログイン後にコピー

Clone インターフェイスを使用して、arr1 の浅いテーブルを複製します。コピー:

ArrayList cloneArr1 = arr1.Clone() as ArrayList;
ログイン後にコピー

図に示すように:



.NET Framework-Cloneについて詳しく紹介してください
クローンインスタンス cloneArr1 がコピーした内容を個別にテストして、値の型と参照型のコピーをそれぞれ確認します。まず、値の型のコピーを見てみましょう:

cloneArr1[1]=6;
ログイン後にコピー
初期セット arr1[1] の要素が変更されているかどうかを確認してみましょう。

は変更されていません
、値はまだ5です。これは、Cloneの後、値の型もコピーされてメモリスタックに配置されることを示しています。 参照型がメモリ ヒープから領域を再度開き、シャオミンの連絡先を変更したかどうかを確認します - 電話番号:

 (cloneArr1[0] as Person).description.UpdateTelephone("170444455555");
ログイン後にコピー

この時点で、初期セット arr1 のシャオミンの連絡先情報が変更されているかどうかを再度確認します。

回答: 最新の 170444455555 と一致するように変更されました。

これは、参照型の場合、シャロー コピー コピーはメモリ ヒープ内のメモリ空間を再度開かずに参照のみをコピーすることを示しています。 (メモリ ヒープとメモリ スタックの概念がよくわからない場合は、私の要約を参照してください: C#.NET: メモリ管理のストーリー - 変数の作成と破棄)。

この時点で、クローンの機能について新たに理解しました。浅いコピー、参照型はオブジェクトではなく参照のみをコピーします。 !

では、ディープコピーを実現したい場合、つまり、新しくコピーするオブジェクトが単なる参照のコピーではなく、オブジェクトのコピーである場合はどうすればよいでしょうか!たとえば、テンプレートに基づいて 5 つのバージョンの作成を変更する必要があり、各バージョンは別の会社に配信され、バージョン 1 は会社 A に配信され、バージョン 2 は会社 B に配信されます。 。 。これら 5 つのバージョンの違いは「○○社への入社を希望しています」だけであり、○○社は対応する 5 社の名前に置き換えられるとします。

以上が.NET Framework-Cloneについて詳しく紹介してくださいの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート