C#には、コピーコンストラクターやオーバーロードの概念はありませんoperator=
。C#では、オブジェクトは存在するだけで、コードでそれらのハンドルを使用します。ハンドルは「値で」コピーしてコード全体で使用できますが、これはいわゆる「浅い」コピーであり、オブジェクト自体は同じであり、すべて同じメモリを(間接的に)指します。
コピーコンストラクターは、マネージドワールドでのディープコピーに似ており、を介してそれを実現できますが、ICloneable
それを作成するのは完全に手動であり、オブジェクトの実装次第です。boost
また、シリアル化(方法)または任意の方法の間接的な方法でそれを達成することもできます。
最後のポイントとして、オブジェクトの存続期間は非決定論的であるため(GCが任意に死ぬべきであると決定したときに死ぬ)、デストラクタのようなものもありません。最も近いのは、ファイナライザー(オブジェクトが収集されたときに非決定論的に呼び出される)と、ファイナライズを制御するように見えるIDisposable
パターン(と一緒に)です。using
言うまでもなく、それらはめったに使用されません。
編集:コピーコンストラクターには同等のものはありませんが、「型キャスト」コンストラクターimplicit
はありますが、現時点では正確な名前はわかりません。