首页 >后端开发 >C#.Net教程 >C# 中的克隆()

C# 中的克隆()

WBOY
WBOY原创
2024-09-03 15:15:27897浏览

C# 中的 Clone() 是一个字符串方法,用于返回对象的精确副本。它返回字符串的实例。返回的只是具有不同视图的副本。如果我们想克隆一个数组,这个方法也很有用。对于数组,它会创建具有相同元素数量的数组的副本。 ICloneable 接口中的 Clone 方法允许复制数据。您不需要为此方法提供任何参数。

实现clone()的语法

public object Clone()

实现 ICloneable() 的语法

public interface ICloneable
{
object Clone();
}

如您所见,它不需要任何参数并返回一个引用。

如果我们想修改克隆的对象,我们可以,并且这样做不会修改原始对象。

使用clone()方法可以让开发者变得更容易,因为他们需要编写更少的代码并且易于理解。除此之外不需要其他特殊属性;它复制所有属性。我们只能在类内部调用这个方法。它返回一个对象,所以我们在使用这个方法时需要进行强制转换。最好在所有要克隆的类中实现此方法。我们可以通过两种技术来实现:1.深复制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# 中的克隆()

示例#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();
}
}
}
}

上面的例子定义了一个栈,使用push方法插入元素。堆。 clone() 方法克隆堆栈及其所有元素。它使用 foreach 显示原始堆栈和克隆堆栈以及所有元素。

输出

C# 中的克隆()

结论

clone() 函数复制一个对象并返回实例。使用这种方法,我们可以克隆一个具有相同数量元素的数组。 “ICloneable”的实现还包括调用用于数据复制的克隆方法。实现克隆并不是一件好事,因为它会让开发人员更容易编写代码。

以上是C# 中的克隆()的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:Trim() in C#下一篇:C# random