オブジェクト初期化子
CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 8/70。
オブジェクト初期化子を使うと、多くのパラメーターを指定してコンストラクターを呼び出すことなく、オブジェクトの作成時にプロパティの値を簡単に設定できます。
コンストラクターを使用する従来の方法
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
Person person = new Person();
person.Name = "Alice";
person.Age = 25;
person.City = "New York";オブジェクト初期化子の構文を使用する
Person person = new Person
{
Name = "Alice",
Age = 25,
City = "New York"
};コンストラクターを使用したオブジェクト初期化子
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
public Person(string name)
{
Name = name;
}
}
// コンストラクターがNameを設定し、初期化子がほかのプロパティを設定する
Person person = new Person("Bob")
{
Age = 30,
City = "London"
};ネストされたオブジェクト初期化子
public class Address
{
public string Street { get; set; }
public string City { get; set; }
}
public class Person
{
public string Name { get; set; }
public Address Address { get; set; }
}
Person person = new Person
{
Name = "Charlie",
Address = new Address
{
Street = "123 Main St",
City = "Boston"
}
};初期化子を使用した複数のオブジェクトの作成
Person person1 = new Person { Name = "Alice", Age = 25 };
Person person2 = new Person { Name = "Bob", Age = 30 };
Person person3 = new Person { Name = "Charlie", Age = 35 };オブジェクト初期化子を使うと、コードがよりすっきりして読みやすくなります。プロパティはコンストラクターの実行後に設定されます。初期化子はコンストラクターパラメーターの有無にかかわらず使用でき、柔軟かつ簡潔にオブジェクトを作成できます。
チャレンジ
中級異なるオブジェクト初期化子の方法を使用して、3つのStudentオブジェクトを作成します。
- student1: デフォルトコンストラクターとオブジェクト初期化子を使用して、入力からすべてのプロパティ(Name、StudentId、Major、GPA)を設定します
- student2: オブジェクト初期化子を使用して、Name = "Bob" と Major = "Engineering" のみを設定します
- student3: パラメーターに "Charlie" を指定してコンストラクターを使用し、その後オブジェクト初期化子を使用して StudentId = 54321、Major = "Mathematics"、GPA = 3.5 を設定します
自分で試してみよう
using System;
class Program
{
static void Main()
{
string name = Console.ReadLine();
int studentId = int.Parse(Console.ReadLine());
string major = Console.ReadLine();
double gpa = double.Parse(Console.ReadLine());
// TODO: すべてのプロパティを指定したオブジェクト初期化子を使ってstudent1を作成する
// 既定のコンストラクターを使い、Name、StudentId、Major、GPAを設定する
// TODO: NameとMajorのみを指定したオブジェクト初期化子を使ってstudent2を作成する
// Nameを"Bob"、Majorを"Engineering"にする
// TODO: nameパラメーターに"Charlie"を渡すコンストラクターを使ってstudent3を作成する
// 次に、オブジェクト初期化子を使ってStudentId = 54321、Major = "Mathematics"、GPA = 3.5を設定する
Console.WriteLine($"Student 1: {student1.Name} (ID: {student1.StudentId}) - {student1.Major}, GPA: {student1.GPA}");
Console.WriteLine($"Student 2: {student2.Name} (ID: {student2.StudentId}) - {student2.Major}, GPA: {student2.GPA}");
Console.WriteLine($"Student 3: {student3.Name} (ID: {student3.StudentId}) - {student3.Major}, GPA: {student3.GPA}");
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: C#オンラインコンパイラ