Jak zainicjować obiekty przy użyciu inicjatora obiektów (Przewodnik programowania w języku C#)
Artykuł
Za pomocą inicjatorów obiektów można zainicjować obiekty typu w sposób deklaratywny bez jawnego wywoływania konstruktora dla typu.
W poniższych przykładach pokazano, jak używać inicjatorów obiektów z nazwanymi obiektami. Kompilator przetwarza inicjatory obiektów, najpierw uzyskują dostęp do konstruktora wystąpienia bez parametrów, a następnie przetwarzając inicjowanie składowych. W związku z tym, jeśli konstruktor bez parametrów jest zadeklarowany jako private w klasie, inicjatory obiektów, które wymagają dostępu publicznego, zakończy się niepowodzeniem.
W poniższym przykładzie pokazano, jak zainicjować nowy StudentName typ przy użyciu inicjatorów obiektów. W tym przykładzie StudentName ustawia właściwości typu:
C#
publicclassHowToObjectInitializers
{
publicstaticvoidMain()
{
// Declare a StudentName by using the constructor that has two parameters.
StudentName student1 = new StudentName("Craig", "Playstead");
// Make the same declaration by using an object initializer and sending// arguments for the first and last names. The parameterless constructor is// invoked in processing this declaration, not the constructor that has// two parameters.
StudentName student2 = new StudentName
{
FirstName = "Craig",
LastName = "Playstead"
};
// Declare a StudentName by using an object initializer and sending// an argument for only the ID property. No corresponding constructor is// necessary. Only the parameterless constructor is used to process object// initializers.
StudentName student3 = new StudentName
{
ID = 183
};
// Declare a StudentName by using an object initializer and sending// arguments for all three properties. No corresponding constructor is// defined in the class.
StudentName student4 = new StudentName
{
FirstName = "Craig",
LastName = "Playstead",
ID = 116
};
Console.WriteLine(student1.ToString());
Console.WriteLine(student2.ToString());
Console.WriteLine(student3.ToString());
Console.WriteLine(student4.ToString());
}
// Output:// Craig 0// Craig 0// 183// Craig 116publicclassStudentName
{
// This constructor has no parameters. The parameterless constructor// is invoked in the processing of object initializers.// You can test this by changing the access modifier from public to// private. The declarations in Main that use object initializers will// fail.publicStudentName() { }
// The following constructor has parameters for two of the three// properties.publicStudentName(string first, string last)
{
FirstName = first;
LastName = last;
}
// Properties.publicstring? FirstName { get; set; }
publicstring? LastName { get; set; }
publicint ID { get; set; }
publicoverridestringToString() => FirstName + " " + ID;
}
}
Inicjatory obiektów mogą służyć do ustawiania indeksatorów w obiekcie. W poniższym przykładzie zdefiniowano klasę BaseballTeam , która używa indeksatora do pobierania i ustawiania graczy na różnych pozycjach. Inicjator może przypisywać zawodników na podstawie skrótu pozycji lub liczby używanej dla każdej karty wyników baseballu pozycji:
Źródło tej zawartości można znaleźć w witrynie GitHub, gdzie można również tworzyć i przeglądać problemy i żądania ściągnięcia. Więcej informacji znajdziesz w naszym przewodniku dla współtwórców.
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię:
Dołącz do serii meetup, aby tworzyć skalowalne rozwiązania sztucznej inteligencji oparte na rzeczywistych przypadkach użycia z innymi deweloperami i ekspertami.
Learn how to create classes and instantiate objects that expose encapsulated field data by using class definitions, constructors, and the 'new' operator.