다음을 통해 공유


읽기 쓰기 속성을 선언하고 사용하는 방법(C# 프로그래밍 가이드)

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

이 샘플에서는 Person(문자열) 및 Name(int)의 두 가지 속성이 있는 Age 클래스를 보여 줍니다. 두 속성 모두 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 - {person}");

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

        // Increment the Age property:
        person.Age += 1;
        Console.WriteLine($"Person details - {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
*/

강력한 프로그래밍

이전 예제에서 Name 속성과 Age 속성은 public이며, 접근자 getset를 모두 포함합니다. 공용 접근자를 사용하면 모든 개체가 이러한 속성을 읽고 쓸 수 있습니다. 그러나 접근자 중 하나를 제외하는 것이 바람직한 경우도 있습니다. set 접근자를 생략하여 속성을 읽기 전용으로 만들 수 있습니다.

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

또는 한 접근자를 공개적으로 노출하지만 다른 접근자를 비공개로 만들거나 보호할 수 있습니다. 자세한 내용은 비대칭 접근자 접근성을 참조하세요.

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

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 호출에 의해 자동으로 실행됩니다.

참고하십시오