집 >백엔드 개발 >C#.Net 튜토리얼 >C#의 클론()
C#의 Clone()은 개체의 정확한 복사본을 반환하는 데 사용되는 문자열 메서드입니다. 문자열의 인스턴스를 반환합니다. 반품은 다른 보기의 복사본일 뿐입니다. 이 방법은 배열을 복제하려는 경우에도 유용합니다. 배열의 경우 동일한 수의 요소로 배열의 복사본을 만듭니다. ICloneable 인터페이스의 Clone 메소드를 사용하면 데이터 복사가 가능합니다. 이 방법에는 매개변수를 제공할 필요가 없습니다.
clone() 구현 구문
public object Clone()
ICloneable() 구현 구문
public interface ICloneable { object Clone(); }
보시다시피 매개변수가 필요하지 않으며 참조를 반환합니다.
복제된 객체를 수정하고 싶다면 그렇게 할 수 있으며 이렇게 해도 원본 객체는 수정되지 않습니다.
clone() 메소드를 사용하면 개발자가 이해하기 쉬운 코드를 덜 작성해야 하므로 작업이 쉬워집니다. 이와 함께 다른 특별한 속성은 필요하지 않습니다. 모든 속성을 복사합니다. 이 메서드는 클래스 내에서만 호출할 수 있습니다. 객체를 반환하므로 이 메서드를 사용할 때는 캐스팅을 수행해야 합니다. 복제할 모든 클래스에 이 메서드를 구현하는 것이 좋습니다. 1. 딥 카피(Deep Copy) 2. 얕은 카피(Shallow Copy)라는 두 가지 기술을 사용하여 이를 달성할 수 있습니다.
얕은 복사는 새 개체를 만든 다음 현재 개체의 비정적 필드를 새 개체에 복사하는 것입니다. 반면, 딥 카피는 새 객체를 생성한 다음 현재 객체의 비정적 필드를 새 객체에 복사하는 것입니다.
다음은 C#에서 clone() 및 ICloneable 인터페이스를 구현하는 방법을 보여주는 예입니다.
코드
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()은 이 문자열 개체를 복제하는 데 사용됩니다. 데이터의 또 다른 복사본을 반환합니다. 따라서 반환 값은 다른 뷰와 동일한 데이터라고 말할 수 있습니다. 이 방법에는 매개변수가 필요하지 않습니다. 출력에는 원본 문자열과 복제된 문자열이 표시되는 것을 볼 수 있는데, 이는 원본 문자열의 정확한 복사본입니다.
출력
코드
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()은 배열의 모든 요소를 복제하는 데 사용됩니다. 출력에서 유사한 배열 복사본이 생성되었음을 확인할 수 있습니다.
출력
코드
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() 메소드는 해당 요소를 복제하는 데 사용됩니다. 복제된 배열의 모든 요소 값을 변경할 수도 있습니다. 출력에는 먼저 지정된 어레이와 복제된 어레이가 표시됩니다. 인덱싱 위치를 전달하여 값을 변경할 수도 있습니다. 값을 전달한 후 새로운 값 세트가 포함된 복제된 배열을 표시합니다. 즉, 원본 배열 요소의 값을 방해하지 않고 복제된 배열의 값을 수정할 수 있다는 의미입니다.
출력
코드
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() 메서드를 사용하여 객체를 복제했습니다. 일련의 인수를 사용하여 공개 생성자를 호출한 후 복제 메소드를 호출해야 합니다.
출력
코드
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를 사용하여 모든 요소가 포함된 원본 스택과 복제된 스택을 표시합니다.
출력
clone() 함수는 객체를 복사하고 인스턴스를 반환합니다. 이 방법을 사용하면 동일한 수의 요소로 배열을 복제할 수도 있습니다. 'ICloneable' 구현에는 데이터 복사를 위한 clone 메서드 호출도 포함됩니다. 개발자가 코드를 더 쉽게 만들 수 있으므로 클론을 구현하는 것은 좋지 않습니다.
위 내용은 C#의 클론()의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!