2013-03-27 3 views
7

C# 사양 (17.2)에서는 특성을 지정할 때 여러 개의 특성 대상이 있음을 나타냅니다. 이는 속성을 지정하는 "실제"위치가없는 경우에 속성을 적용해야 할 때 일반적입니다. 예를 들어, return 대상은 플랫폼 호출에 자주 사용됩니다method-target의 목적은 무엇입니까?

[method: DllImport("somelib.dll")] 
static extern bool SomeWin32Method(); 

어떤 상황에서 내가 명시 적으로 정의해야합니다 :

[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool SomeWin32Method(); //Assume this is valid, has a DllImport, etc. 

내가 method 같은 다른 속성의 대상이 있음을 발견하지만 method 속성 대상 (모호성을 해결하기 위해 말함) 또는 완전성을 위해서만 존재합니까?

답변

7

이 경우 대상을 지정하지 않아도됩니다 (메서드 바로 위에있는 method이 기본 대상입니다). 완전성을 위해 여기에 대상을 지정해야합니다. 클래스에 멤버를 추가 할 때 private을 지정할 필요가 없지만 많은 사람들이이를 수행합니다. 그리고 많은 경우에 코드 생성기는 사물에 대해 특별히 명시하고 싶어합니다.

또한, 나는이 같은 경우에 생각 추가 지정은 좀 더 명확한 일을한다 : 또한

[method: SomeAttr] 
[return: SomeOtherAttr] 
int SomeMethod() { return 0; } 
+1

, 예'[방법 SomeAttr]에서 공개 이벤트 액션 MyFieldLikeEvent,'는'방법을 :'목표는 중복되지 않습니다. 속성이 자동 생성 접근 자 ('add'와'remove') 모두에 적용된다는 것을 의미합니다. 기본값은 이벤트 자체에 속성을 적용하는 것입니다. –

+0

불특정 필드에 대한 기본 액세스 수정자인'internal'을 지정할 필요가 없다는 것을 믿습니다. – nicholas

관련 문제