Menu
Coddy logo textTech

オブジェクト初期化子

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 };

オブジェクト初期化子を使用すると、コードがよりクリーンで読みやすくなります。プロパティはコンストラクタの実行後に設定されます。コンストラクタ引数の有無にかかわらず初期化子を使用できるため、オブジェクトの作成が柔軟かつ簡潔になります。

challenge icon

チャレンジ

中級

異なるオブジェクト初期化子の手法を使用して、3つの Student オブジェクトを作成してください:

  • student1: デフォルトコンストラクタとオブジェクト初期化子を使用して、すべてのプロパティ(Name、StudentId、Major、GPA)を入力から設定します
  • student2: オブジェクト初期化子を使用して、Name = "Bob" と Major = "Engineering" のみを設定します
  • student3: "Charlie" をパラメータとしてコンストラクタを使用し、次にオブジェクト初期化子を使用して StudentId = 54321、Major = "Mathematics"、GPA = 3.5 を設定します

チートシート

オブジェクト初期化子は、オブジェクトの作成時にプロパティ値を設定するための便利な方法を提供します。

Person person = new Person
{
    Name = "Alice",
    Age = 25,
    City = "New York"
};

オブジェクト初期化子はコンストラクターと組み合わせることができます:

Person person = new Person("Bob")
{
    Age = 30,
    City = "London"
};

入れ子になったオブジェクト初期化子を使用すると、入れ子になったオブジェクトのプロパティを設定できます:

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 };

自分で試してみよう

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: 名前パラメータ "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}");
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン