ホームページ  >  記事  >  バックエンド開発  >  C# の clone()

C# の clone()

WBOY
WBOYオリジナル
2024-09-03 15:15:27859ブラウズ

C# の

Clone() は、オブジェクトの正確なコピーを返すために使用される文字列メソッドです。文字列のインスタンスを返します。リターンは、異なるビューを備えた単なるコピーです。この方法は、配列のクローンを作成する場合にも役立ちます。配列の場合は、同じ数の要素を持つ配列のコピーが作成されます。 ICloneable インターフェイスの Clone メソッドを使用すると、データをコピーできます。このメソッドにはパラメータを指定する必要はありません。

clone() 実装の構文

public object Clone()

ICloneable() を実装する構文

public interface ICloneable
{
object Clone();
}

ご覧のとおり、パラメーターは必要なく、参照を返します。

複製されたオブジェクトを変更したい場合は変更できますが、これを行っても元のオブジェクトは変更されません。

clone () メソッドを使用すると、開発者は理解しやすいコードを少なく書く必要があるため、作業が容易になります。これに加えて他の特別な属性は必要ありません。すべてのプロパティをコピーします。このメソッドはクラス内でのみ呼び出すことができます。オブジェクトを返すため、このメソッドを使用する場合はキャストする必要があります。クローンを作成するすべてのクラスにこのメソッドを実装すると良いでしょう。これは、1. 深いコピー 2. 浅いコピーの 2 つのテクニックを使用することで実現できます。

浅いコピーとは、新しいオブジェクトを作成し、現在のオブジェクトの非静的フィールドを新しいオブジェクトにコピーすることです。一方、ディープ コピーでは、新しいオブジェクトを作成し、現在のオブジェクトの非静的フィールドを新しいオブジェクトにコピーします。

C# での clone() の例

以下は、C# で clone () と ICloneable インターフェイスを実装する方法を示す例です。

例 #1

コード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Clone
{
class Program
{
static void Main(string[] args)
{
string s1 = "This is C# programming";
string s2 = (String)s1.Clone();
// Displaying both the strings
Console.WriteLine("String to be cloned : {0}", s1);
Console.WriteLine("Cloned String : {0}", s2);
Console.ReadLine();
}
}
}

上記の例には、クローンを作成する必要がある文字列があります。 Clone() は、この文字列オブジェクトのクローンを作成するために使用されます。データの別のコピーを返します。したがって、戻り値は別のビューと同じデータであると言えます。このメソッドにはパラメーターは必要ありません。出力では、元の文字列と複製された文字列 (元の文字列の正確なコピー) が表示されていることがわかります。

出力

C# の clone()

例 #2

コード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Clone
{
class Program
{
static void Main(string[] args)
{
// array initialization
string[] arraytobecloned = { "This", "is", "C#", "clone", "example"};
string[] clonedarray = arraytobecloned.Clone() as string[];   //cloning array
// display original and cloned arrays
Console.WriteLine(string.Join(",", arraytobecloned));
Console.WriteLine(string.Join(",", clonedarray));
Console.WriteLine();
Console.ReadLine();
}
}
}

上記の例では、要素のセットを含む配列が定義されており、これを複製する必要があります。 Clone() は、配列のすべての要素のクローンを作成するために使用されます。出力では、配列の同様のコピーが作成されたことがわかります。

出力

C# の clone()

例 #3

コード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Clone
{
class Program
{
static void Main(string[] args)
{
string[] arraytobecloned = { "This", "is", "C#", "clone", "example" };
string[] clonedarray = arraytobecloned.Clone() as string[];
Console.WriteLine(string.Join(",", arraytobecloned));
Console.WriteLine(string.Join(",", clonedarray));
Console.WriteLine();
clonedarray[4] = "demo";   // providing new value to cloned array element
Console.WriteLine(string.Join(",", arraytobecloned));       // displaying arrays
Console.WriteLine(string.Join(",", clonedarray));
Console.ReadLine();
}
}
}

上記の例では、さまざまな要素を含む配列セットが定義されています。 clone () メソッドは、これらの要素のクローンを作成するために使用されます。クローン配列の任意の要素の値を変更することもできます。出力には、最初に指定された配列と複製された配列が表示されます。インデックス位置を渡すことで値を変更することもできます。値を渡すと、新しい値のセットを含むクローン配列が表示されます。つまり、元の配列要素の値を妨げることなく、複製された配列の値を変更できることになります。

出力

C# の clone()

例 #4

コード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Clone
{
class Employee : ICloneable    // implementing ICloneable interface
{
int empcode;
string name;
public Employee(int empcode, string name)
{
this.empcode = empcode;
this.name = name;
}
public object Clone()
{
return new Employee(this.empcode, this.name);
}
public override string ToString()
{
return string.Format("empcode = {0}, name = {1},",
this.empcode,
this.name
);
}
}
class Program
{
static void Main()      // main method
{
Employee e1 = new Employee(10, "John");
Employee e2 = e1.Clone() as Employee;
Console.WriteLine("1. {0}", e1);
Console.WriteLine("2. {0}", e2);
Console.ReadLine();
}
}
}

上記の例では、ICloneable インターフェイスと clone() メソッドを使用してオブジェクトを複製します。一連の引数を指定して public コンストラクターを呼び出した後、clone メソッドを呼び出す必要があります。

出力

C# の clone()

例 #5

コード

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Clone
{
class Program
{
static void Main(string[] args)
{
//declare and initialize a stack
Stack stack1 = new Stack();
stack1.Push(10);
stack1.Push(20);
stack1.Push(30);
stack1.Push(40);
stack1.Push(50);
Console.WriteLine("Stack elements are...");
foreach (int val in stack1)
{
Console.WriteLine(val);
}
Stack stack2 = (Stack)stack1.Clone();
Console.WriteLine("Stack cloned elements are");
foreach (int val in stack2)
{
Console.WriteLine(val);
Console.ReadLine();
}
}
}
}

上記の例では、push メソッドを使用して要素を挿入するスタックを定義しています。スタック。 clone () メソッドは、すべての要素を含むスタックのクローンを作成します。元のスタックと、foreach を使用してすべての要素を含む複製されたスタックが表示されます。

出力

C# の clone()

結論

clone() 関数はオブジェクトをコピーし、インスタンスを返します。この方法を使用すると、同じ数の要素を持つ配列のクローンを作成できます。 「ICloneable」の実装には、データをコピーするための clone メソッドの呼び出しも含まれています。クローンを実装すると開発者にとってコードが簡単になるため、推奨されません。

以上がC# の clone()の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:C# の Trim()次の記事:C# の Trim()