방법: 개체 이니셜라이저를 사용하여 개체 초기화(C# 프로그래밍 가이드)How to: Initialize Objects by Using an Object Initializer (C# Programming Guide)

개체 이니셜라이저를 사용하여 형식에 대한 생성자를 명시적으로 호출하지 않고 선언적 방식으로 형식 개체를 초기화할 수 있습니다.You can use object initializers to initialize type objects in a declarative manner without explicitly invoking a constructor for the type.

다음 예제에서는 명명된 개체와 함께 개체 이니셜라이저를 사용하는 방법을 보여 줍니다.The following examples show how to use object initializers with named objects. 컴파일러는 먼저 기본 인스턴스 생성자에 액세스한 다음 멤버 초기화를 처리하여 개체 이니셜라이저를 처리합니다.The compiler processes object initializers by first accessing the default instance constructor and then processing the member initializations. 따라서 클래스에서 기본 생성자가 private로 선언된 경우 공용 액세스가 필요한 개체 이니셜라이저는 실패합니다.Therefore, if the default constructor is declared as private in the class, object initializers that require public access will fail.

무명 형식을 정의하는 경우 개체 이니셜라이저를 사용해야 합니다.You must use an object initializer if you're defining an anonymous type. 자세한 내용은 방법: 쿼리에서 요소 속성의 하위 집합 반환을 참조하세요.For more information, see How to: Return Subsets of Element Properties in a Query.

예제Example

다음 예제에서는 개체 이니셜라이저를 사용하여 새 StudentName 형식을 초기화하는 방법을 보여 줍니다.The following example shows how to initialize a new StudentName type by using object initializers. 이 예제에서는 StudentName 형식의 속성을 설정합니다.This example sets properties in the StudentName type:

public class HowToObjectInitializers
{
    public static void Main()
    {
        // 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 default 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 default 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  116

    public class StudentName
    {
        // The default constructor has no parameters. The default 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.
        public StudentName() { }

        // The following constructor has parameters for two of the three 
        // properties. 
        public StudentName(string first, string last)
        {
            FirstName = first;
            LastName = last;
        }

        // Properties.
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int ID { get; set; }

        public override string ToString() => FirstName + "  " + ID;
    }
}

개체 이니셜라이저를 사용하여 개체의 이니셜라이저를 설정할 수 있습니다.Object initializers can be used to set indexers in an object. 다음 예제에서는 인덱서를 사용하여 여러 포지션의 선수를 가져오고 설정하는 BaseballTeam 클래스를 정의합니다.The following example defines a BaseballTeam class that uses an indexer to get and set players at different positions. 이 이니셜라이저는 포지션을 가리키는 약어 또는 각 포지션에 사용되는 번호를 기준으로 선수에게 야구 득점표를 할당할 수 있습니다.The initializer can assign players, based on the abbreviation for the position, or the number used for each position baseball scorecards:

public class HowToIndexInitializer
{
    public class BaseballTeam
    {
        private string[] players = new string[9];
        private readonly List<string> positionAbbreviations = new List<string>
        {
            "P", "C", "1B", "2B", "3B", "SS", "LF", "CF", "RF"
        };

        public string this[int position]
        {
            // Baseball positions are 1 - 9.
            get { return players[position-1]; }
            set { players[position-1] = value; }
        }
        public string this[string position]
        {
            get { return players[positionAbbreviations.IndexOf(position)]; }
            set { players[positionAbbreviations.IndexOf(position)] = value; }
        }
    }

    public static void Main()
    {
        var team = new BaseballTeam
        {
            ["RF"] = "Mookie Betts",
            [4] = "Jose Altuve",
            ["CF"] = "Mike Trout"
        };

        Console.WriteLine(team["2B"]);
    }
}

참고 항목See also