C#

c# property 자동 구현 속성 - Class에 있는 get get 쉽게 만들기

saltdoll 2015. 10. 6. 03:48
반응형

c# 클래스 안에 있는 get set 함수를 함축적으로 만들기.


자동으로 구현된 속성은 C# 3.0 이상에서 속성 접근자에 추가적인 논리가 필요하지 않을 경우 자동 구현 속성을 통해 속성 선언이 더 간결해집니다. 



 일반

함축적 사용 

private string m_strTitle;

public string strTitle

{

  get { return m_strTitle; }

  set { m_strTitle = value; }

}

 public string strTitle { get; set; }




간단한 예제 2

 일반

함축적 사용 

private string name;

public string Name

{

  get { return this.name; }

  set this.name = value; }

}

 public string Name { get; set; }

(예제 출처: http://stackoverflow.com/questions/5096926/what-is-the-get-set-syntax-in-c )



참고: (MS) 자동으로 구현된 속성 (C# 프로그래밍 가이드)

참고: (MS) 자동으로 구현된 속성을 사용하여 간단한 클래스 구현(C# 프로그래밍 가이드)

참고: (hoons.kr 참조) Property의 get, set에 대한 간단한 정리



우선 property는 
1.
    1
 private string name;
    2 public string GetName() { return name; }
    3 public void SetName(string n) { name = n; }
2.

    1 private string name;

    2 public string Name

    3 {

    4        get { return name; }

    5        set { name = value; }

    6 }
3.

    1 public string Email { getset; }


요렇게 3가지의 방법을 구현을 할 수 있지요 보통은 1번은 거의 안쓰고 2,3번을 쓰게 되는데 3번같은 경우는 닷넷 프레임워크 3.0부터 지원하고 있습니다. 



그렇다면 이 둘의 차이는 무엇일까요??
현재로써는 아무런 차이가 없다고 합니다~컴파일시 약간의 차이를 띄긴 하지만 결국, 값을 넣고(set), 빼는(get) 동일한 기능을 한다는 것이지요.


3번의 자동으로 구현된 속성의 경우 컴파일시 익명의 전용 필드가 생성되어 동일한 방법으로 get, set메서드가 구현됩니다. 액세스를 한정하는 방법에도 문법적인 차이가 있다는데요. 그건 책이나 MDSN을 찾아보시면 쉽게 찾을수 있다네요.(전 못찾겠던데 ㅜㅜ) 뭐 암튼 그렇구요

그런데 값을 get할때나 set할때 가공(처리)를 하고 싶다면 어떻게 하면 될까요!?
예를 들어 값을 가져올때(get) html태그를 제거하고 순수 문자열만 가져오고 싶다면? C#3.0의 자동 구현된 속성에서는 문법적으로 방법이 없는거죠.그냥 자동으로 구현을 해주니 일반적인 속성만 나오게되니 불가능 하게 되는거죠 하지만 기존의 명시적인 속성 구현방법으로는 가능이 한것입니다. set도 마찬가지고요. 그리고 여러개의 프로퍼티가 하나의 private필드를 다룰 수도 있습니다.(저는 이건 보지 못했네요 ^^)
private string _content;

public string Content
{
    get
    {
        return Regex.Replace(_content, @"<(.|\n)*?>"string.Empty);
    }
    set { _content = value; }
}

C#3.0이상으로 코드를 작성하면서 값을 get, set하는 속성을 구현한다면 코드를 한줄이라도 더 줄일수 있는 자동구현된 속성을 이용하는게 더 좋다는것이죠. 기호에 맞게 사용하면 된다는 것입니다 ^^

반응형
도움이 되셨다면 하트모양의 "♡ 공감"을 눌러주시면 큰 격려가 됩니다.
(로그인하지 않으셔도 가능)