방법: 읽기/쓰기 속성 선언 및 사용(C# 프로그래밍 가이드)
속성을 사용하면 개체의 데이터에 보호되거나 제어되지 않고 확인되지 않은 방식으로 액세스하는 데 따른 위험 없이 공용 데이터 멤버의 이점을 누릴 수 있습니다.이 과정에는 내부 데이터 멤버에서 값을 할당 및 검색하기 위한 특별한 메서드인 접근자가 사용됩니다.set 접근자를 사용하면 데이터 멤버를 할당할 수 있고 get 접근자를 사용하면 데이터 멤버 값을 검색할 수 있습니다.
이 샘플에서는 문자열인 Name 및 정수인 Age라는 두 속성이 있는 Person 클래스를 보여 줍니다.두 속성은 모두 get 및 set 접근자를 제공하므로 이는 모두 읽기/쓰기 속성으로 간주됩니다.
예제
class Person
{
private string name = "N/tcA";
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;
}
}
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/tcA, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100
*/
강력한 프로그래밍
위 예제에서 Name과 Age 속성은 public이며 get 및 set 접근자를 모두 포함합니다.이렇게 하면 임의의 개체가 이들 속성을 읽고 쓸 수 있습니다.그러나 때로는 이러한 접근자 중 하나를 제외해야 할 수도 있습니다.예를 들어, set 접근자를 생략하면 속성을 읽기 전용으로 만들 수 있습니다.
public string Name
{
get
{
return name;
}
}
또는 접근자 하나만 공용으로 노출시키고 다른 접근자는 전용 또는 보호된 상태로 만들 수 있습니다.자세한 내용은 비대칭 접근자 액세스 가능성을 참조하십시오.
일단 속성이 선언되면 클래스의 필드처럼 사용할 수 있습니다.다음 문에서와 같이 속성 값을 구하고 설정할 때 기본 구문을 사용할 수 있습니다.
person.Name = "Joe";
person.Age = 99;
속성의 set 메서드에서 특수한 value 변수를 사용할 수 있습니다.이 변수에는 사용자가 지정한 값이 포함됩니다. 예를 들어 다음과 같습니다.
name = value;
Person 개체의 Age 속성을 증분하는 데 필요한 clean 구문에 주의하십시오.
person.Age += 1;
속성을 모델링할 때 set 및 get 메서드를 각각 사용한 경우에는 다음과 같은 코드를 사용해도 결과가 동일합니다.
person.SetAge(person.GetAge() + 1);
다음 예제에서는 ToString 메서드를 재정의합니다.
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
ToString은 프로그램에서 명시적으로 사용되지 않으며WriteLine 호출에서 기본적으로 호출됩니다.