C++/CX 에서 프로퍼티 사용

C++/CX에서 지원하는 프로퍼티는 C# 2.0까지 사용하는 방식의 get, set 을 구현 방식이다.

public ref class Test sealed
{
public:
    Test( void);

private
:
    String^ _name;

   

public:
    property String ^ Name
    {
        String^ get() { return _name; }
        void set(String ^ name) { _name = name; }
    }

};
}

   

   

C# 3.0 에서 프로퍼티 사용

하지만 C# 3.0에 와서는 더 편리하게 자동 구현 속성을 지원한다. 컴파일 시에 아래의 프로퍼티는 알아서 get_XXX(), set_XXX() 메서드로 변환하여 컴파일을 수행한다.

class Test
{

     public String Name { get; set; }

 
   // And
     public int Age { get; protected set; }

 
   // And
     public String Address { get; private set; }
}

   

   

C++/CX 에서 매크로를 이용하는 방법

C++/CX에서 프로퍼티를 선언하여 사용하는 방식에 불편함을 느껴, 다음과 같이 매크로를 만들어 프로퍼티 선언에 사용하였다. 

public ref class Test sealed
{
public:
       Test( void);

public
:
        PROPERTY(String ^, Name);
        PROPERTY(int32 , Age);
        PROPERTY_GET(String ^, FirstName);
        PROPERTY_GET(String ^, LastName);
};
}

   

아래의 매크로 코드를 사용하여 프로퍼티 선언을 쉽게 하자.

#define __PROPERTY_GET_FUNC (TYPE, NAME) TYPE get() { return m_##NAME; }
#define __PROPERTY_SET_FUNC (TYPE, NAME) void set(TYPE value) { m_##NAME = value; }
#define __DEFINE_PROPERTY (TYPE, TYPENAME) property TYPE TYPENAME
#define __PROPERTY (TYPE, NAME, IMPL) \
private: \
       TYPE m_##NAME; \
public
: \
        __DEFINE_PROPERTY(TYPE, NAME) \
       { \
       IMPL \
       } \

#define
 PROPERTY_GET (TYPE, NAME) __PROPERTY(TYPE, NAME, __PROPERTY_GET_FUNC(TYPE, NAME))
#define PROPERTY_SET (TYPE, NAME) __PROPERTY(TYPE, NAME, __PROPERTY_SET_FUNC(TYPE, NAME))
#define PROPERTY (TYPE, NAME)     __PROPERTY(TYPE, NAME, __PROPERTY_GET_FUNC(TYPE, NAME) __PROPERTY_SET_FUNC (TYPE, NAME))

   

   

※ 2012년 7월, 필자의 페이스북에서 공유한 정보이다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 땡초 POWERUMC

댓글을 달아 주세요