Share via


특성 대상 구체화(C# 프로그래밍 가이드)

업데이트: 2007년 11월

일부 경우에는 특성이 적용될 엔터티인 특성 대상이 모호할 수 있습니다. 예를 들어, 다음 메서드 선언에서 SomeAttr 특성은 메서드 또는 메서드 반환 값에 적용될 수 있습니다.

public class SomeAttr : System.Attribute { }

[SomeAttr]
int Method()
{
    return 0;
}

마샬링을 할 때 이러한 경우가 자주 발생합니다. 이러한 모호성을 해결하기 위해서 C#에는 각 선언 종류마다 기본 대상 집합이 있으며, 특성 대상을 명시적으로 지정하여 기본 대상 집합을 재정의할 수 있습니다.

// default: applies to method
[SomeAttr]
int Method1() { return 0; } 

// applies to method
[method: SomeAttr]
int Method2() { return 0; } 

// applies to return value
[return: SomeAttr]
int Method3() { return 0; } 

이것은 SomeAttr이 유효하다고 정의된 대상과 무관합니다. 즉, 반환 값에만 적용되도록 SomeAttr을 정의한 경우에도 여전히 return 대상을 지정해야 합니다. 다시 말하면 컴파일러는 모호한 특성 대상을 결정하기 위해 AttributeUsage 정보를 사용하지 않습니다. 자세한 내용은 AttributeUsage(C# 프로그래밍 가이드)를 참조하십시오.

특성 대상에 대한 구문은 다음과 같습니다.

[target : attribute-list]

매개 변수

  • target
    assembly, field, event, method, module, param, property, return 및 type 중 하나입니다.

  • attribute-list
    적용 가능한 특성 목록입니다.

다음 표의 첫 번째 열에는 특성을 사용할 수 있는 모든 선언이 나열되어 있고 두 번째 열에는 각 선언에 사용할 수 있는 특성 대상이 나열되어 있습니다. 굵은 글꼴로 표시된 대상이 기본값입니다.

선언

가능한 대상

assembly

assembly

module

module

class

type

struct

type

interface

type

enum

type

delegate

type, return

method

method, return

parameter

param

필드

field

property — indexer

property

property — get accessor

method, return

property — set accessor

method, param, return

event — field

event, field, method

event — property

event, property

event — add

method, param

event — remove

method, param

어셈블리 및 모듈 수준 특성에는 기본 대상이 없습니다. 자세한 내용은 전역 특성을 참조하십시오.

예제

using System.Runtime.InteropServices;
[Guid("12345678-1234-1234-1234-123456789abc"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface ISampleInterface
{
    [DispId(17)]  // set the DISPID of the method
    [return: MarshalAs(UnmanagedType.Interface)]  // set the marshaling on the return type
    object DoWork();
}

참고 항목

개념

C# 프로그래밍 가이드

참조

리플렉션(C# 프로그래밍 가이드)

특성(C# 프로그래밍 가이드)

특성 사용(C# 프로그래밍 가이드)

사용자 지정 특성 만들기(C# 프로그래밍 가이드)

리플렉션을 사용하여 특성 액세스(C# 프로그래밍 가이드)

System.Reflection

Attribute