다음을 통해 공유


특성 대상(C++ 구성 요소 확장)

특성사용량지정자특성대상을 지정할 수 있습니다.특정 언어 요소에적용하다하려면 각특성정의 됩니다.예를 들어, 클래스와 구조체에만적용하다하는특성정의 됩니다.다음은 사용자 지정특성에 사용 되는 구문 요소입니다.이러한 값의 조합 (논리를 사용 하 여 또는)를 사용할 수 있습니다.

하나를 전달할특성대상을 지정 하려면 AttributeTargets 열거자를 AttributeUsageAttribute 의특성을 정의 하는 경우.

다음은유효한특성대상의 목록입니다.

대상

샘플 사용

모두

(모든 구문에 적용 됩니다.)

// attribute_targets_all.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::All)]
ref class Attr : public Attribute {};
[assembly:Attr];

Assembly

(전체어셈블리에 적용)

// attribute_targets_assembly.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Assembly)]
ref class Attr : public Attribute {};
[assembly:Attr];

모듈

(모듈에 전체적으로 적용)

// attribute_targets_module.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Module)]
ref class Attr : public Attribute {};
[module:Attr];

클래스

// attribute_targets_class.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Class)]
ref class Attr : public System::Attribute {};
[Attr]   // same as [class:Attr]
ref class MyClass {};

구조체

// attribute_targets_struct.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Struct)]
ref class Attr : public Attribute {};
[Attr]   // same as [struct:Attr]
value struct MyStruct{};

enum

// attribute_targets_enum.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Enum)]
ref class Attr : public Attribute {};
[Attr]   // same as [enum:Attr]
enum struct MyEnum{e, d};

생성자

// attribute_targets_constructor.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Constructor)]
ref class Attr : public Attribute {};
ref struct MyStruct{
   [Attr] MyStruct(){}   // same as [constructor:Attr]
};

메서드

// attribute_targets_method.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Method)]
ref class Attr : public Attribute {};
ref struct MyStruct{
   [Attr] void Test(){}   // same as [method:Attr]
};

Property

// attribute_targets_property.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Property)]
ref class Attr : public Attribute {};
ref struct MyStruct{
   [Attr] property int Test;   // same as [property:Attr]
};

필드

// attribute_targets_field.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Field)]
ref class Attr : public Attribute {};
ref struct MyStruct{
   [Attr] int Test;   // same as [field:Attr]
};

Event

// attribute_targets_event.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Event)]
ref class Attr : public Attribute {};
delegate void ClickEventHandler(int, double);
ref struct MyStruct{
   [Attr] event ClickEventHandler^ OnClick;   // same as [event:Attr]
};

Interface

// attribute_targets_interface.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Interface)]
ref class Attr : public Attribute {};
[Attr]   // same as [event:Attr]
interface struct MyStruct{};

Parameter

// attribute_targets_parameter.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Parameter)]
ref class Attr : public Attribute {};
ref struct MyStruct{
   void Test([Attr] int i);
   void Test2([parameter:Attr] int i);
};

대리자

// attribute_targets_delegate.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Delegate)]
ref class Attr : public Attribute {};
[Attr] delegate void Test();
[delegate:Attr] delegate void Test2();

ReturnValue

// attribute_targets_returnvalue.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::ReturnValue)]
ref class Attr : public Attribute {};
ref struct MyStruct {
   // Note required specifier
   [returnvalue:Attr] int Test() { return 0; }
};

일반적으로특성에 직접 적용 되는 언어 요소를 앞에 옵니다.그러나 경우에 따라서는특성의 위치특성의대상확인 하려면 부족 합니다.다음 예제를 고려해 보십시오.

[Attr] int MyFn(double x)...

구문적으로특성은메서드또는메서드의반환 값적용하다하려면 위한 것입니다 경우 확인할 수 없습니다 (이대/소문자이메서드를 기본값).이 경우특성사용량지정자사용할 수 있습니다.예를 들어,반환 값으로 하는특성을적용하다수 있는 returnvalue지정자를 같이:

[returnvalue:Attr] int MyFn(double x)... // applies to return value

특성사용량지정 자가 다음과 같은 경우에 필요 합니다.

  • 어셈블리-또는모듈을 지정 하려면-수준특성입니다.

  • 특성적용메서드의반환 값에 없는메서드를 지정 하려면:

    [method:Attr] int MyFn(double x)...     // Attr applies to method
    [returnvalue:Attr] int MyFn(double x)...// Attr applies to return value
    [Attr] int MyFn(double x)...            // default: method
    
  • 특성에속성아닌속성의 접근자에 적용 되도록 지정 하려면:

    [method:MyAttr(123)] property int Property()  
    [property:MyAttr(123)] property int Property()
    [MyAttr(123)] property int get_MyPropy() // default: property
    
  • 특성이벤트없는이벤트의 접근자에 적용 되도록 지정.

    delegate void MyDel();
    ref struct X {
       [field:MyAttr(123)] event MyDel* MyEvent;   //field
       [event:MyAttr(123)] event MyDel* MyEvent;   //event
       [MyAttr(123)] event MyDel* MyEvent;   // default: event
    }
    

특성사용량지정자바로 오는특성에 적용 됩니다. 즉,

[returnvalue:Attr1, Attr2]

서로 다른입니다.

[returnvalue:Attr1, returnvalue:Attr2]

예제

ms177223.collapse_all(ko-kr,VS.110).gif설명

이 샘플에서는 여러 대상을 지정 하는 방법을 보여 줍니다.

ms177223.collapse_all(ko-kr,VS.110).gif코드

// attribute_targets.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Class | AttributeTargets::Struct, AllowMultiple = true )]
ref struct Attr : public Attribute {
   Attr(bool i){}
   Attr(){}
};

[Attr]
ref class MyClass {};

[Attr]
[Attr(true)]
value struct MyStruct {};

참고 항목

참조

사용자 정의 특성(C++ 구성 요소 확장)