>  기사  >  백엔드 개발  >  C#의 클론()

C#의 클론()

WBOY
WBOY원래의
2024-09-03 15:15:27847검색

C#의 Clone()은 개체의 정확한 복사본을 반환하는 데 사용되는 문자열 메서드입니다. 문자열의 인스턴스를 반환합니다. 반품은 다른 보기의 복사본일 뿐입니다. 이 방법은 배열을 복제하려는 경우에도 유용합니다. 배열의 경우 동일한 수의 요소로 배열의 복사본을 만듭니다. ICloneable 인터페이스의 Clone 메소드를 사용하면 데이터 복사가 가능합니다. 이 방법에는 매개변수를 제공할 필요가 없습니다.

clone() 구현 구문

public object Clone()

ICloneable() 구현 구문

public interface ICloneable
{
object Clone();
}

보시다시피 매개변수가 필요하지 않으며 참조를 반환합니다.

복제된 객체를 수정하고 싶다면 그렇게 할 수 있으며 이렇게 해도 원본 객체는 수정되지 않습니다.

clone() 메소드를 사용하면 개발자가 이해하기 쉬운 코드를 덜 작성해야 하므로 작업이 쉬워집니다. 이와 함께 다른 특별한 속성은 필요하지 않습니다. 모든 속성을 복사합니다. 이 메서드는 클래스 내에서만 호출할 수 있습니다. 객체를 반환하므로 이 메서드를 사용할 때는 캐스팅을 수행해야 합니다. 복제할 모든 클래스에 이 메서드를 구현하는 것이 좋습니다. 1. 딥 카피(Deep Copy) 2. 얕은 카피(Shallow Copy)라는 두 가지 기술을 사용하여 이를 달성할 수 있습니다.

얕은 복사는 새 개체를 만든 다음 현재 개체의 비정적 필드를 새 개체에 복사하는 것입니다. 반면, 딥 카피는 새 객체를 생성한 다음 현재 객체의 비정적 필드를 새 객체에 복사하는 것입니다.

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#의 클론()

예시 #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#의 클론()

예시 #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#의 클론()

예시 #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() 메서드를 사용하여 객체를 복제했습니다. 일련의 인수를 사용하여 공개 생성자를 호출한 후 복제 메소드를 호출해야 합니다.

출력

C#의 클론()

예시 #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();
}
}
}
}

위의 예에서는 요소를 삽입하기 위해 푸시 메서드를 사용하여 스택을 정의합니다. 스택. clone() 메소드는 모든 요소와 함께 스택을 복제합니다. foreach를 사용하여 모든 요소가 포함된 원본 스택과 복제된 스택을 표시합니다.

출력

C#의 클론()

결론

clone() 함수는 객체를 복사하고 인스턴스를 반환합니다. 이 방법을 사용하면 동일한 수의 요소로 배열을 복제할 수도 있습니다. 'ICloneable' 구현에는 데이터 복사를 위한 clone 메서드 호출도 포함됩니다. 개발자가 코드를 더 쉽게 만들 수 있으므로 클론을 구현하는 것은 좋지 않습니다.

위 내용은 C#의 클론()의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:C#의 트림()다음 기사:C#의 트림()