首頁 > 後端開發 > C#.Net教程 > C# 中的複製建構函數

C# 中的複製建構函數

WBOY
發布: 2024-09-03 15:12:44
原創
677 人瀏覽過

複製另一個物件的變數並建立一個新物件的建構函式稱為複製建構函式。在C#中,複製建構子也是一個參數化建構子。參數化建構函數是包含相同類別類型的參數的建構子。每當我們想要將新實例初始化為現有實例的值時,複製建構子就很有用。因此,複製建構函式是一種基本上將一個物件的值傳送到另一個物件而不影響現有物件的值的建構函式。

複製建構函式在 C# 中如何運作?

在 C# 中,如果我們想要審核一個類別或記住該類別的舊值,我們可以使用複製建構子。 C# 不提供複製建構函式。但是,我們可以將複製建構函式與另一個建構函式一起使用。

文法

class Name {
// Parameterized Constructor
public Name(parameters)
{
// code
}
public Name(Name instance of class)   //copyconstructor
{
//code
}
}
登入後複製

建構函式的名稱與其類別名稱相同。建構函數的方法簽名由方法名稱及其參數清單組成。一個類別中可以有任意數量的建構子。複製建構子不是類別中唯一的建構子。需要另一個建構函式和複製建構函式來建立物件。以下範例展示如何在類別中使用複製建構函式。

範例 1:沒有複製建構子

代碼

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() 用來顯示物件的值。

輸出:

 C# 中的複製建構函數

使用複製建構子

代碼

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是一個包含兩個建構子的類別。複製建構函式始終與另一個建構函式一起使用。複製建構函式將一個物件的名稱和年齡屬性傳送到另一個物件。下面是上述程式的輸出,因為第一個值適用於現有對象,複製建構函式複製這些值並建立一個與現有物件具有相同值的新物件。

範例2

代碼

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() 顯示這些值。新物件不會影響現有物件的值。輸出如下圖所示。

輸出:

C# 中的複製建構函數

範例3

代碼

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();
}
}
登入後複製

輸出:

C# 中的複製建構函數

 C# 複製建構子的規則

  • 複製建構子的名稱應與類別名稱相同。
  • 複製建構子需要另一個建構子來複製物件。
  • 複製建構子沒有回傳型別。
  • 複製建構子不能是最終的、靜態的、抽象的。

結論

所以每當你想要將一個物件值複製到其他物件時,你可以使用複製建構函式。這是一種告訴編譯器如何將一個物件的值複製到另一個物件中的方法。當我們將參數傳遞給物件時,就會發生這種情況。也可以透過向類別中添加 Clone 方法來使用 ICloneable 接口,從而複製現有物件。在複製建構函式中,您可以透過提供唯一 ID 或複製一些必填欄位而不是其他欄位來指定自訂行為。

以上是C# 中的複製建構函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板