Klon() dalam C# ialah kaedah rentetan yang digunakan untuk mengembalikan salinan tepat sesuatu objek. Ia mengembalikan contoh rentetan. Pulangannya hanyalah salinan dengan pandangan berbeza. Kaedah ini juga berguna jika kita ingin mengklon tatasusunan. Dalam kes tatasusunan, ia mencipta salinan tatasusunan dengan bilangan elemen yang sama. Kaedah Klon dalam antara muka ICloneable membolehkan penyalinan data. Anda tidak perlu memberikan sebarang parameter untuk kaedah ini.
Sintaks pelaksanaan klon ()
public object Clone()
Sintaks pelaksanaan ICloneable()
public interface ICloneable { object Clone(); }
Seperti yang anda lihat, ia tidak memerlukan sebarang parameter dan mengembalikan rujukan.
Jika kita ingin mengubah suai objek klon, kita boleh, dan melakukan ini tidak akan mengubah suai objek asal.
Menggunakan kaedah klon () memudahkan pembangun kerana mereka perlu menulis kurang kod yang mudah difahami. Tiada atribut khas lain diperlukan bersama-sama dengan ini; ia menyalin semua sifat. Kita boleh memanggil kaedah ini di dalam kelas sahaja. Ia mengembalikan objek, jadi kita perlu melakukan pemutus apabila kita menggunakan kaedah ini. Adalah baik untuk melaksanakan kaedah ini dalam semua kelas untuk mengklon. Kita boleh mencapainya dengan menggunakan dua teknik 1. Deep copy 2. Shallow copy.
Penyalinan cetek ialah mencipta objek baharu dan kemudian menyalin medan bukan statik objek semasa ke objek baharu. Sebaliknya, penyalinan dalam membuat objek baharu dan kemudian menyalin medan bukan statik objek semasa ke objek baharu.
Di bawah ialah contoh yang menunjukkan cara kami boleh melaksanakan klon () dan antara muka ICloneable dalam C#.
Kod
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(); } } }
Dalam contoh di atas, terdapat rentetan yang perlu kita klon. Clone() digunakan untuk mengklon objek rentetan ini. Ia mengembalikan satu lagi salinan data. Jadi kita boleh mengatakan bahawa nilai pulangan adalah data yang sama dengan pandangan lain. Kaedah ini tidak memerlukan sebarang parameter. Dalam output, anda dapat melihat bahawa ia memaparkan rentetan asal dan rentetan klon, yang merupakan salinan tepat rentetan asal.
Output
Kod
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(); } } }
Dalam contoh di atas, tatasusunan dengan set elemen ditakrifkan, yang perlu diklon. Clone() digunakan untuk mengklon semua elemen tatasusunan. Dalam output, anda dapat melihat bahawa ia telah mencipta salinan tatasusunan yang serupa.
Output
Kod
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(); } } }
Dalam contoh di atas, set tatasusunan ditakrifkan, mengandungi elemen yang berbeza. Kaedah klon () digunakan untuk mengklon elemen tersebut. Kita juga boleh menukar nilai mana-mana elemen tatasusunan klon itu. Output pertama memaparkan tatasusunan yang diberikan dan tatasusunan klon. Kita juga boleh menukar nilai dengan melepasi kedudukan pengindeksannya. Selepas melepasi nilai, ia menunjukkan tatasusunan klon dengan set nilai baharu. Jadi ini bermakna kita boleh mengubah suai nilai tatasusunan klon, yang tidak mengganggu nilai unsur tatasusunan asal.
Output
Kod
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(); } } }
Dalam contoh di atas, kami menggunakan antara muka ICloneable dan kaedah klon() untuk menduplikasi objek. Selepas memanggil pembina awam dengan satu set hujah, anda hendaklah memanggil kaedah klon.
Output
Kod
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(); } } } }
Contoh di atas mentakrifkan tindanan menggunakan kaedah tolak untuk memasukkan elemen. timbunan. Kaedah klon () mengklon timbunan dengan semua elemennya. Ia memaparkan tindanan asal dan tindanan klon dengan semua elemen menggunakan foreach.
Output
Fungsi klon() menyalin objek dan mengembalikan contoh. Menggunakan kaedah ini, kita boleh mengklon tatasusunan juga dengan bilangan elemen yang sama. Pelaksanaan 'ICloneable' juga termasuk panggilan kepada kaedah klon untuk penyalinan data. Adalah tidak baik untuk melaksanakan klon kerana ia menjadikan kod lebih mudah untuk pembangun.
Atas ialah kandungan terperinci klon() dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!