Share via


읽기/쓰기 속성 선언 및 사용 방법(C# 프로그래밍 가이드)

속성은 개체 데이터에 대한 액세스가 보호, 제어, 확인되지 않을 위험 없이 공용 데이터 멤버의 편리함을 제공합니다. 속성은 기본 데이터 멤버에서 값을 할당하고 검색하는 특수 메서드인 접근자를 선언합니다. set 접근자를 통해 데이터 멤버를 할당할 수 있으며, get 접근자는 데이터 멤버 값을 검색합니다.

이 샘플에서는 Name(string) 및 Age(int)의 두 속성이 있는 Person 클래스를 보여 줍니다. 두 속성 모두 getset 접근자를 제공하므로 읽기/쓰기 속성으로 간주됩니다.

예시

class Person
{
    private string _name = "N/A";
    private int _age = 0;

    // Declare a Name property of type string:
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
        }
    }

    // Declare an Age property of type int:
    public int Age
    {
        get
        {
            return _age;
        }

        set
        {
            _age = value;
        }
    }

    public override string ToString()
    {
        return "Name = " + Name + ", Age = " + Age;
    }
}

public class Wrapper
{
    private string _name = "N/A";
    public string Name
    {
        get
        {
            return _name;
        }
        private set
        {
            _name = value;
        }
    }

}

class TestPerson
{
    static void Main()
    {
        // Create a new Person object:
        Person person = new Person();

        // Print out the name and the age associated with the person:
        Console.WriteLine("Person details - {0}", person);

        // Set some values on the person object:
        person.Name = "Joe";
        person.Age = 99;
        Console.WriteLine("Person details - {0}", person);

        // Increment the Age property:
        person.Age += 1;
        Console.WriteLine("Person details - {0}", person);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Person details - Name = N/A, Age = 0
    Person details - Name = Joe, Age = 99
    Person details - Name = Joe, Age = 100
*/

강력한 프로그래밍

이전 예제에서 NameAge 속성은 public이며, getset 접근자를 모두 포함합니다. 공용 접근자를 사용하면 모든 개체가 이러한 속성을 읽고 쓸 수 있습니다. 그러나 때로는 접근자 중 하나를 제외하는 것이 좋습니다. 속성을 읽기 전용으로 만들려면 set 접근자를 생략할 수 있습니다.

public string Name
{
    get
    {
        return _name;
    }
    private set
    {
        _name = value;
    }
}

또는 하나의 접근자를 공개적으로 노출하고 다른 접근자를 private 또는 protected로 설정할 수 있습니다. 자세한 내용은 비대칭 접근자 접근성을 참조하세요.

속성이 선언되면 클래스의 필드로 사용할 수 있습니다. 속성은 다음 문과 같이 속성 값을 가져오고 설정할 때 자연스러운 구문을 허용합니다.

person.Name = "Joe";
person.Age = 99;

속성 set 메서드에서는 특수한 value 변수를 사용할 수 있습니다. 이 변수에는 사용자가 지정한 값이 포함됩니다. 예를 들면 다음과 같습니다.

_name = value;

Person 개체의 Age 속성을 증가하기 위한 정리된 구문은 다음과 같습니다.

person.Age += 1;

개별 setget 메서드를 사용하여 속성을 모델링한 경우 동등한 코드가 다음과 같이 표시될 수 있습니다.

person.SetAge(person.GetAge() + 1);

다음 예제에서는 ToString 메서드가 재정의되었습니다.

public override string ToString()
{
    return "Name = " + Name + ", Age = " + Age;
}

ToString은 프로그램에서 명시적으로 사용되지 않습니다. 기본적으로 WriteLine 호출에 의해 호출됩니다.

참고 항목