English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# 객체 초기화자

C#3.0 (.NET 3.5를 도입했습니다.객체 초기화자 문법이는 클래스나 집합 객체를 초기화하는 새로운 방법입니다. 객체 초기화 프로그램은 객체를 생성할 때 필드나 속성에 값을 할당할 수 있도록, 생성자를 호출하지 않아도 됩니다.

public class Student
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public int Age { get; set; }
    public string Address { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        Student std = new Student() { StudentID = 1, 
                                      StudentName = "Bill", 
                                      Age = 20, 
                                      Address = "New York"   
                                    };
    }
}

위의 예제에서 Student 클래스를 정의하면서 어떤 생성자도 정의하지 않았습니다. Main() 메서드에서 Student 객체를 생성하면서 대括호 내의 모든 또는 일부 속성에 값을 할당했습니다. 이를 객체 초기화자 문법이라고 합니다.

컴파일러는 위의 초기화 프로그램을 다음과 같은 내용으로 컴파일합니다.

Student __student = new Student();
__student.StudentID = 1;
__student.StudentName = "Bill";
__student.Age = 20;
__student.StandardID = 10;
__student.Address = "Test";
Student std = __student;

집합 초기화자 문법

집합 초기화자 문법을 사용하여 클래스 객체와 동일한 방식으로 집합을 초기화할 수 있습니다。

var student1 = new Student() { StudentID = 1, StudentName = "John" };
var student2 = new Student() { StudentID = 2, StudentName = "Steve" };
var student3 = new Student() { StudentID = 3, StudentName = "Bill" } ;
var student4 = new Student() { StudentID = 3, StudentName = "Bill" };
var student5 = new Student() { StudentID = 5, StudentName = "Ron" };
IList<Student> studentList = new List<Student>() { 
                                                    student1, 
                                                    student2, 
                                                    student3, 
                                                    student4, 
                                                    student5 
                                                };

대상을 동시에 초기화할 수 있습니다。

IList<Student> studentList = new List<Student>() { 
                    new Student() { StudentID = 1, StudentName = "John"} ,
                    new Student() { StudentID = 2, StudentName = "Steve"} ,
                    new Student() { StudentID = 3, StudentName = "Bill"} ,
                    new Student() { StudentID = 3, StudentName = "Bill"} ,
                    new Student() { StudentID = 4, StudentName = "Ram" } ,
                    new Student() { StudentID = 5, StudentName = "Ron" } 
                };

널을 요소로 지정할 수도 있습니다:

IList<Student> studentList = new List<Student>() { 
                                    new Student() { StudentID = 1, StudentName = "John"} ,
                                    null
                                };

초기화자의 장점

  • 초기화자 문법은 코드의 가독성을 높이고 요소를 쉽게 컬렉션에 추가할 수 있게 합니다。

  • 멀티 스레드에서 매우 유용합니다。