다음을 통해 공유


속성(C++ 구성 요소 확장)

데이터 멤버 또는 배열 요소처럼 동작하고 액세스하는 멤버 함수인 속성을 선언합니다.

모든 런타임

다음 속성 유형 중 하나를 선언할 수 있습니다.

  • 단순 속성
    기본적으로 속성 값을 할당하는 set 접근자, 속성 값을 검색하는 get 접근자, 속성 값을 포함하며 컴파일러에서 생성된 전용 데이터 멤버를 만듭니다.

  • 속성 블록
    사용자 정의 get 및/또는 set 접근자를 만듭니다. 속성은 get 및 set 접근자가 모두 정의된 경우 읽기/쓰기이고 get 접근자만 정의된 경우 읽기 전용이며 set 접근자만 정의된 경우 쓰기 전용입니다.

    속성 값을 포함하도록 데이터 멤버를 명시적으로 선언해야 합니다.

  • 인덱싱된 속성
    하나 이상의 인덱스로 지정되는 속성 값을 가져오거나 설정하는 데 사용할 수 있는 속성 블록입니다.

    사용자 정의 속성 이름 또는 기본 속성 이름이 있는 인덱싱된 속성을 만들 수 있습니다. 기본 인덱스 속성의 이름은 속성이 정의된 클래스의 이름입니다. 기본 속성을 선언하려면 속성 이름 대신 default 키워드를 지정합니다.

    속성 값을 포함하도록 데이터 멤버를 명시적으로 선언해야 합니다. 인덱싱된 속성의 경우 데이터 멤버는 일반적으로 배열 또는 컬렉션입니다.

구문

property type property_name;

   property type property_name { 
      access-modifier type get() inheritance-modifier {property_body}; 
      access-modifier void set(type value) inheritance-modifier {property_body};
   } 

   property type property_name[index_list] { 
      access-modifier type get(index_list) inheritance-modifier {property_body}; 
      access-modifier void set(index_list, value) inheritance-modifier {property_body};
   } 

   property type default[index_list] { 
      access-modifier type get(index_list) inheritance-modifier {property_body};
      access-modifier void set(index_list, value) inheritance-modifier {property_body};
   }

매개 변수

  • type
    속성 값의 데이터 형식 및 결과적으로 속성 자체입니다.

  • property_name
    속성 이름

  • access-modifier
    액세스 한정자입니다. 유효한 한정자는 static 및 virtual입니다.

    get 또는 set 접근자는 virtual 한정자에 동의할 필요가 없지만, static 한정자에는 동의해야 합니다.

  • inheritance-modifier
    상속 한정자입니다. 유효한 한정자는 abstract 및 sealed입니다.

  • index_list
    하나 이상의 인덱스를 쉼표로 구분한 목록입니다. 각 인덱스는 인덱스 형식과 속성 메서드 본문에서 사용할 수 있는 선택적 식별자로 구성됩니다.

  • value
    set 작업에서 속성에 할당하거나 get 작업에서 검색할 값입니다.

  • property_body
    set 또는 get 접근자의 속성 메서드 본문입니다. property_body는 index_list를 사용하여 기본 속성 데이터 멤버에 사용자 정의된 처리의 매개 변수로 액세스할 수 있습니다.

Windows 런타임

자세한 내용은 Properties (C++/CX)을 참조하십시오.

요구 사항

컴파일러 옵션: /ZW

공용 언어 런타임

구문

modifier property type property_name;

modifier property type property_name {
   modifier void set(type);
   modifier type get();
}
modifier property type property_name[index-list, value] {
   modifier void set(index-list, value);
   modifier type get(index-list);

modifier property type default[index];
}

매개 변수

  • modifier
    속성 선언 또는 get/set 접근자 메서드에 사용할 수 있는 한정자입니다. 가능한 값은 static과 virtual입니다.

  • type
    속성으로 표현되는 값 형식입니다.

  • property_name
    raise 메서드의 매개 변수는 대리자의 시그니처와 일치해야 합니다.

  • index_list
    대괄호에 지정된 하나 이상의 인덱스를 쉼표로 구분한 목록입니다(아래 첨자 연산자, ([])). 각 인덱스에 대해 형식을 지정하고 속성 메서드 본문에서 사용할 수 있는 식별자를 선택적으로 지정합니다.

설명

첫 번째 구문 예제는 set 및 get 메서드를 암시적으로 선언하는 단순 속성을 보여줍니다. 컴파일러는 속성의 값을 저장할 전용 필드를 자동으로 만듭니다.

두 번째 구문 예제는 set 및 get 메서드를 명시적으로 선언하는 속성 블록을 보여줍니다.

세 번째 구문 예제에서는 고객 정의 인덱스 속성을 보여줍니다. 인덱스 속성은 설정하거나 검색할 값 외에 매개 변수를 사용합니다. 속성에 이름을 지정해야 합니다. 간단한 속성과 달리 인덱스 속성의 set and/or get 메서드는 명시적으로 정의해야 하며 속성의 이름을 지정해야 합니다.

네 번째 구문 예제는 형식의 인스턴스에 대한 배열 같은 액세스를 제공하는 기본 속성을 보여 줍니다. 키워드 default는 기본 속성을 지정하는 데만 사용됩니다. 기본 속성의 이름은 속성이 정의된 형식의 이름입니다.

property 키워드는 클래스, 인터페이스 또는 값 형식에 나타날 수 있습니다. 속성은 get 함수(읽기 전용), set 함수(쓰기 전용) 또는 둘 다(읽기/쓰기)를 포함할 수 있습니다.

속성 이름은 자신을 포함하는 관리되는 클래스의 이름과 일치할 수 없습니다. getter 함수의 반환 형식은 해당 setter 함수의 마지막 매개 변수 형식과 반드시 일치해야 합니다.

클라이언트 코드의 경우 속성은 일반 데이터 멤버의 모양을 갖고 있으며 데이터 멤버와 같은 구문을 사용하여 쓰거나 읽을 수 있습니다.

virtual 한정자에서는 get 및 set 메서드가 일치하지 않아도 됩니다.

get 및 set 메서드의 액세스 가능성은 달라질 수 있습니다.

속성 메서드의 정의는 일반 메서드와 마찬가지로 클래스 본문 외부에 나타날 수 있습니다.

static 한정자에서는 속성에 대한 get 및 set 메서드가 일치해야 합니다.

해당 get 및 set 메서드가 다음 설명에 적합한 경우 속성은 스칼라입니다.

  • get 메서드에는 매개 변수가 없으며 반환 형식이 T입니다.

  • set 메서드에는 형식 T의 매개 변수와 반환 형식 void가 있습니다.

식별자가 같은 범위에 선언된 스칼라 속성은 하나만 있어야 합니다. 스칼라 속성을 오버로드할 수 없습니다.

속성 데이터 멤버가 선언되면 컴파일러는 때때로 클래스에서 "백업 저장소"라고도 하는 데이터 멤버를 주입합니다. 그러나 데이터 멤버의 이름은 포함 클래스의 실제 데이터 멤버인 것처럼 소스에서 멤버를 참조할 수 있는 형태가 아닙니다. ildasm.exe를 사용하여 형식의 메타데이터를 보고 속성의 백업 저장소에 대해 컴파일러에서 생성된 이름을 확인합니다.

다른 액세스 가능성은 속성 블록의 접근자 메서드에 허용됩니다. 즉, set 메서드는 공용, get 메서드는 전용이 될 수 있습니다. 그러나 접근자 메서드가 속성 자체의 선언보다 더 제한적인 액세스 가능성을 갖는다는 것은 오류입니다.

property는 상황에 맞는 키워드입니다. 자세한 내용은 상황에 맞는 키워드(C++ 구성 요소 확장)을 참조하십시오.

속성에 대한 자세한 내용은 다음을 참조하십시오.

요구 사항

컴파일러 옵션: /clr

예제

다음 예제에서는 속성 데이터 멤버와 속성 블록의 선언 및 사용을 보여줍니다. 속성 접근자는 클래스를 정의할 수 있음을 보여줍니다.

// mcppv2_property.cpp
// compile with: /clr
using namespace System;
public ref class C {
   int MyInt;
public:

   // property data member
   property String ^ Simple_Property;

   // property block
   property int Property_Block {

      int get();

      void set(int value) {
         MyInt = value;
      }
   }
};

int C::Property_Block::get() {
   return MyInt;
}

int main() {
   C ^ MyC = gcnew C();
   MyC->Simple_Property = "test";
   Console::WriteLine(MyC->Simple_Property);

   MyC->Property_Block = 21;
   Console::WriteLine(MyC->Property_Block);
}

Output

  
  

참고 항목

개념

런타임 플랫폼의 구성 요소 확장