某些编程语言的类提供了复制构造函数,即从当前类实例构造一个新的类实例。在C#编程语言中,没有提供复制构造函数,如果要实现复制构造的功能,就必须自行编写这样的构造函数。
本示例主要说明了如何实现复制构造函数,技术要点如下。
— 复制构造函数仍然属于构造函数,不同的是以类本身作为参数的数据类型。
— 调用构造函数时,参数必须是已经创建的类实例。
using System;
using System.Text ;
using System.Collections;
namespace Fuhegouzaohanshu
{
/// <summary>
/// Class1 の概要の説明です。
/// </summary>
class Class1
{
/// <summary>
/// アプリケーションのメインエントリ ポイントです。
/// </summary>
[STAThread]
static void Main (string[] args)
{
Person person1 = new Person("George", 40);
// Create another new object, copying person.
Person person2 = new Person(person1);
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadLine();
}
}
class Person//表示“人”的类
{
private string name;
private int age;
//构造函数
public Person(string name, int age)
{
this.name = name ;
this.age = age;
}
//复 制构造函数,以类实例作为参数的构造函数,将参数实例的字段赋给当前实例字段
public Person(Person aperson)
{
name = aperson.name ;
age = aperson.age ;
}
public string Details
{
get
{
return name + "is " +age.ToString();
}
}
}
}
本示例的Person类中定义了两个构造函数。一个是默认的、不带参数的构造函数,另一个是以Person类实例作为参数的复制构造函数。在主程序入口Main方法中,首先使用默认的构造函数创建Person类的实例personA,然后给personA中的字段赋值,再将personA类实例作为Person类复制构造函数的参数,创建Person类的另一个实例personB,最后将personB的数据打印出来
使用构造函数的时候,将在托管内存中为新的类实例分配位置,而不是指向原先的类实例的托管内存位置。在本示例程序中,personB类实例和personA类实例不存在引用关系,其中一个实例字段的修改不会对另一个实例产生影响