Másoláskonstruktor írása (C# programozási útmutató)
A C# -rekordok egy példánykonstruktort biztosítanak az objektumokhoz, de az osztályokhoz saját maga kell írnia egyet.
Fontos
Az osztályhierarchiában az összes származtatott típushoz használható másoláskonstruktorok írása nehéz lehet. Ha az osztály nem sealed
az, érdemes lehet létrehoznia egy hierarchiát a record class
fordító-szintetizált másolási konstruktor használatához.
Példa
Az alábbi példában az Person
osztály egy példánykonstruktort határoz meg, amely argumentumként a példány egy példányát Person
veszi fel. Az argumentum tulajdonságainak értékei az új példány Person
tulajdonságaihoz vannak rendelve. A kód egy másik példánykonstruktort tartalmaz, amely elküldi a Name
másolni kívánt példány tulajdonságait és Age
tulajdonságait az osztály példánykonstruktorának. Az Person
osztály így sealed
nem deklarálható olyan származtatott típusok, amelyek csak az alaposztály másolásával okozhatnak hibákat.
public sealed 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
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: