複製另一個物件的變數並建立一個新物件的建構函式稱為複製建構函式。在C#中,複製建構子也是一個參數化建構子。參數化建構函數是包含相同類別類型的參數的建構子。每當我們想要將新實例初始化為現有實例的值時,複製建構子就很有用。因此,複製建構函式是一種基本上將一個物件的值傳送到另一個物件而不影響現有物件的值的建構函式。
在 C# 中,如果我們想要審核一個類別或記住該類別的舊值,我們可以使用複製建構子。 C# 不提供複製建構函式。但是,我們可以將複製建構函式與另一個建構函式一起使用。
文法
class Name { // Parameterized Constructor public Name(parameters) { // code } public Name(Name instance of class) //copyconstructor { //code } }
建構函式的名稱與其類別名稱相同。建構函數的方法簽名由方法名稱及其參數清單組成。一個類別中可以有任意數量的建構子。複製建構子不是類別中唯一的建構子。需要另一個建構函式和複製建構函式來建立物件。以下範例展示如何在類別中使用複製建構函式。
代碼
class Demo { //variables string name; int age; public Demo(string name, int age) //parameterized constructor { this.name = name; this.age = age; } public void getData() { Console.WriteLine("Name is:{0}", name); Console.WriteLine("Age is:{0}", age); } } class Program { // Main method static void Main(string[] args) { Demo obj = new Demo("John",20); obj.getData(); Console.ReadLine(); } }
在上面的例子中,只有一個參數化建構函數,它有兩個變數。 getData() 用來顯示物件的值。
輸出:
代碼
class Demo { string name; int age; public Demo(string name, int age) //paramertrized constructor { this.name = name; this.age = age; } public Demo(Demo d) //copy constructor { this.name = d.name; this.age = d.age; } public void getData() { Console.WriteLine("Name is:{0}", name); Console.WriteLine("Age is:{0}", age); } } class Program { //main method static void Main(string[] args){ Demo obj = new Demo("John",20); obj.getData(); Demo obj1 = new Demo(obj); //new object obj1.getData(); Console.ReadLine(); } }
在上面的例子中,Demo是一個包含兩個建構子的類別。複製建構函式始終與另一個建構函式一起使用。複製建構函式將一個物件的名稱和年齡屬性傳送到另一個物件。下面是上述程式的輸出,因為第一個值適用於現有對象,複製建構函式複製這些值並建立一個與現有物件具有相同值的新物件。
代碼
class pen { // variables private string name; private string color; private int price; // Copy constructor public pen(pen a) { name = a.name; color = a.color;quantity = a.price; } // Parameterized constructor public pen(string name, string color, int price){ this.name = name; this.color = color; this.quantity =price; } public void getPendetails() {Console.WriteLine("Name is:{0}", name); Console.WriteLine("color is:{0}", color); Console.WriteLine("price is:{0}", price); } // Main Method public static void Main() { // Create a new object. pen p1 = new pen("Parker", "Blue", 30); pen p2 = new pen(p1); p2.getPendetails(); Console.ReadLine(); }} }
在上面的程式中,我們為類別 pen 初始化了三個變量,用於定義該類別的屬性。複製建構函式將筆的屬性從一個物件複製到另一個物件。 main() 函數使用值作為參數化建構函數的參數來初始化一個物件。然後使用 getPendetails() 顯示這些值。新物件不會影響現有物件的值。輸出如下圖所示。
輸出:
代碼
class Calculate { //variables private int a; private int b; public Calculate(int x, int y) // parameterized constructor { a = x; b = y; } public Calculate(Calculate cal) //copy constructor { a = cal.a; b = cal.b; } public int getSum() { return a + b; } } class Sum { // main method static void Main(string[] args) { // create a new object Calculate c1 = new Calculate(34, 4); Calculate c2 = new Calculate(c1); c2.getSum(); Console.ReadLine(); } }
現在讓我們來了解上面的程式。
此類別包含變數 a 和 b 以及兩個建構函數,即一個參數化建構子和一個複製建構子。
代碼
class Calculate { //variables private int a; private int b; public Calculate(int x, int y) //parameterized constructor { a = x; b = y; } public Calculate(Calculate cal) //copy constructor { a = cal.a; b = cal.b; } public int getSum() { return a + b; } }
複製建構子將 cal 物件的值傳送到 a 和 b 中。 函數 gets() 傳回 a 和 b 的和。 main()位於Sum類別中,它以c1為參數進行初始化,然後複製建構子將物件c1的值傳送給物件c2。使用 getSum() 顯示 a 和 b 的總和。
代碼
class Sum { // main method static void Main(string[] args) { Calculate c1 = new Calculate(34, 4); Calculate c2 = new Calculate(c1); c2.getSum(); Console.ReadLine(); } }
輸出:
所以每當你想要將一個物件值複製到其他物件時,你可以使用複製建構函式。這是一種告訴編譯器如何將一個物件的值複製到另一個物件中的方法。當我們將參數傳遞給物件時,就會發生這種情況。也可以透過向類別中添加 Clone 方法來使用 ICloneable 接口,從而複製現有物件。在複製建構函式中,您可以透過提供唯一 ID 或複製一些必填欄位而不是其他欄位來指定自訂行為。
以上是C# 中的複製建構函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!