안녕하세요, 요즘 도통 개발을 하지 않는 개발자 윤진입니다.
C#의 속성과 관련된 부분을 보다가 간단히 코드로 확인하고 싶은 바가 있어 남깁니다.
namespace ConsoleApplication2
{
class Program
{
class Man
{
private int age;
public string Name { get; set; }
public int Age
{
get { return age; }
set
{
if (value > 10) age = 10;
}
}
}
static void Main(string[] args)
{
Man man = new Man();
man.Name = "Jin";
man.Age = 2;
Console.WriteLine(man.Name + " : " + man.Age);
}
}
}
- 속성과 짝이 되는 변수를 반드시 적어줄 필요는 없습니다.
다시 말하면, public string Name { get; set; }의 경우,
컴파일러가 컴파일 시점에 private 변수를 만들어 위의 속성을 관리한다는 것이죠.
public class Man {
public string Name { get; set; }
public int age { get; set; }
}
위의 코드는 아래의 코드와 기능적으로 동일합니다.
public class Man {
private string name;
private int age;
public string Name { get { return name; } set { name = value; } }
public int Age { get { return age; } set { age = value; } }
}
- 빈 getter / setter 지정
속성을 { get; set; }으로 지정하면,
별도의 루틴없이 get / set이 되므로, 외부에서 봤을때는 속성이 변수처럼 동작합니다.
- 동시에 정의해야 하는 getter / setter
get {} 을 정의했다면, set {}도 정의해야합니다.
만약 get만 정의하고 set을 정의하지 않으면, 컴파일 에러가 뜹니다.
정의를 하려면 양쪽 모두에 사이좋게 정의해주세요.
- 키워드 value
set 루틴에서, 사용자가 입력한 값을 value라는 키워드라 지칭합니다.
if (value > 10)과 같은 루틴으로 value를 건네받아 사용할 수 있습니다.
이상으로 간단한 속성의 성질을 알아보았습니다.
_끝
'IT' 카테고리의 다른 글
[C#] Linq 기초용례 기록- (1) | 2017.02.20 |
---|---|
[人터뷰] 모스크바에서 만난 개발자, 알렉세이 (0) | 2017.02.18 |
[C#] delegate, anonymous delegate, lambda 용례비교 (0) | 2017.02.15 |
[C#] using과 Dispose()로 리소스 정리하기 (0) | 2017.02.13 |
[C#] 필드 사용가능? - interface, abstract class, partial class, virtual method (30) | 2017.02.12 |
[C#] 늘 헛갈리 Modal vs Modeless (0) | 2017.02.07 |
[C#] 소수점이 있는 숫자는 float일까 double일까. (30) | 2017.02.04 |
[C#] readonly 변수를 사용하는 이유는? (30) | 2017.02.02 |
[C#] 왜 partial class를 사용하는걸까요? (34) | 2017.02.01 |
[C#] char[]를 string으로 변환하기 (30) | 2017.01.31 |