property (C++/CLI 및 C++/CX)

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

모든 런타임

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

  • ‘단순 속성’
    기본적으로 속성 값을 할당하는 접근자, get 속성 값을 검색하는 접근자 및 속성 값이 포함된 컴파일러 생성 프라이빗 데이터 멤버를 만듭니다set.

  • ‘속성 블록’
    속성 블록을 사용하여 사용자 정의 get 또는 set 접근자를 만듭니다. 속성은 읽기 및 set 쓰기가 모두 get 정의 된 경우 접근자 및 접근자를 정의 하는 경우 읽기 전용 및 접근자만 getset 정의 된 경우 쓰기 전용입니다.

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

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

    사용자 정의 속성 이름 또는 ‘기본’ 속성 이름을 가진 인덱싱된 속성을 만들 수 있습니다. 기본 인덱스 속성의 이름은 속성이 정의된 클래스의 이름입니다. 기본 속성을 선언하려면 속성 이름 대신 키워드(keyword) 지정 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
액세스 한정자입니다. 유효한 한정자는 다음과 같습니다 staticvirtual.

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

inheritance-modifier
상속 한정자입니다. 유효한 한정자는 다음과 같습니다 abstractsealed.

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

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

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

Windows 런타임

자세한 내용은 속성(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 접근자 메서드에 사용할 수 있는 한정자입니다. 가능한 값은 staticvirtual입니다.

type
속성으로 나타내는 값의 형식입니다.

property_name
메서드에 raise 대한 매개 변수입니다. 대리자의 서명과 일치해야 합니다.

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

설명

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

두 번째 구문 예제에서는 setget 메서드를 둘 다 명시적으로 선언하는 ‘속성 블록’을 보여 줍니다.

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

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

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

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

클라이언트 코드에서 속성은 일반 데이터 멤버 형태로 표시되고 데이터 멤버와 같은 구문을 사용하여 쓰거나 읽을 수 있습니다.

set 메서드는 get 한정자에 virtual 동의할 필요가 없습니다.

set 메서드의 접근성은 get 다를 수 있습니다.

속성 메서드의 정의는 일반 메서드처럼 클래스 본문 외부에 나타날 수 있습니다.

get 및 속성에 set 대한 방법은 한정자에 static 동의해야 합니다.

속성과 메서드가 다음 설명에 set 맞는 경우 get 속성은 스칼라입니다.

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

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

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

속성 데이터 멤버가 선언되면 컴파일러에서는 데이터 멤버(“백업 저장소”라고도 함)를 클래스에 주입합니다. 그러나 데이터 멤버의 이름은 포함하는 클래스의 실제 데이터 멤버인 것처럼 원본의 멤버를 참조할 수 없는 형식입니다. ildasm.exe를 사용하여 형식에 대한 메타데이터를 표시하고 속성 백업 저장소의 컴파일러에서 생성된 이름을 확인합니다.

속성 블록에서 접근자 메서드에 대해 서로 다른 접근성을 사용할 수 있습니다. 즉, 메서드가 set 될 수 있고 메서드가 getpublicprivate수 있습니다. 그러나 접근자 메서드가 속성 자체의 선언에 있는 것보다 덜 제한적인 접근성을 갖는 것은 오류입니다.

property는 상황에 맞는 키워드입니다. 자세한 내용은 상황에 맞는 키워드(keyword) 참조하세요.

요구 사항

컴파일러 옵션: /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);
}
test

21

참고 항목

.NET 및 UWP용 구성 요소 확장