Compartilhar via


Como escrever um construtor de cópia (Guia de Programação em C#)

C# não fornece um construtor de cópia para objetos, mas você pode escrever um você mesmo.

Exemplo

No exemplo a seguir, a Person classe define um construtor de cópia que leva uma instância de Person como seu argumento. Os valores das propriedades do argumento são atribuídos às propriedades de nova instância de Person. O código contém um construtor de cópia alternativo que envia as propriedades Name e Age da instância que você deseja copiar para o construtor de instância da classe.

class Person
{
    // Copy constructor. 
    public Person(Person previousPerson)
    {
        Name = previousPerson.Name;
        Age = previousPerson.Age;
    }

    //// Alternate copy constructor calls the instance constructor. 
    //public Person(Person previousPerson) 
    //    : this(previousPerson.Name, previousPerson.Age) 
    //{ 
    //} 

    // Instance constructor. 
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public int Age { get; set; }

    public string Name { get; set; }

    public string Details()
    {
        return Name + " is " + Age.ToString();
    }
}

class TestPerson
{
    static void Main()
    {
        // Create a Person object by using the instance constructor.
        Person person1 = new Person("George", 40);

        // Create another Person object, copying person1.
        Person person2 = new Person(person1);

        // Change each person's age. 
        person1.Age = 39;
        person2.Age = 41;

        // Change person2's name.
        person2.Name = "Charles";

        // Show details to verify that the name and age fields are distinct.
        Console.WriteLine(person1.Details());
        Console.WriteLine(person2.Details());

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output:  
// George is 39 
// Charles is 41

Consulte também

Referência

Classes e structs (Guia de Programação em C#)

Construtores (Guia de Programação em C#)

Destruidores (Guia de Programação em C#)

ICloneable

Conceitos

Guia de Programação em C#