2008-11-09 4 views
4

클래스에 할당 할 수있는 사용자 지정 특성이 있습니다 ([FooAttribute]). 속성 내에서 수행하고 싶은 작업은 어떤 유형이 실제로 나를 사용했는지 결정하는 것입니다. 예 : 내가있는 경우 :사용자 지정 특성 내에서 연결된 형식을 확인하는 방법?

FooAttribute의 코드에서
[FooAttribute] 
public class Bar 
{ 
} 

, 어떻게 내가 나를 추가 한 바 클래스했다 확인할 수 있습니까? 나는 바 타입을 특별히 찾고있는 것이 아니라, 리플렉션을 사용하여 친근한 이름을 설정하기를 원합니다. 예 : 문장에서

[FooAttribute(Name="MyFriendlyNameForThisClass")] 
public class Bar 
{ 
} 

public class FooAttribute() 
{ 
    public FooAttribute() 
    { 
    // How do I get the target types name? (as a default) 
    } 
} 

답변

4

이 먼저 떨어져, 기존 [DisplayName]에 대해 고려해 볼 수 있습니다 알고하지 않습니다 친숙한 이름을 지키는 것. 이미 다뤘던 것처럼, 당신은 단순히 속성 안에서이 정보를 얻을 수 없습니다. 당신이 원하는 무엇 정확하게이다

[Foo("Some name", typeof(Bar)] 

을 즉 - 당신은 바에서 속성을 찾아 볼 수 있지만, 일반적으로, 속성에서 그것을 할 수있는 유일한 방법은에 속성을 유형 을 통과하는 것 ? 다른 옵션이있을 수 있습니다 ...

i18n, resx, etc; DisplayNameAttribute을 서브 클래스 화하고 DisplayName 게터를 오버라이드하여 키의 조회를 제공 할 수 있습니다.

1

는 "난 그냥 반사를 사용하여 친숙한 이름을 설정하려면"나는 당신이 런타임에 속성에 "MyFriendlyNameForThisClass"이름을 설정할 생각합니다. 그렇다면 가능하다고 생각하지 않습니다. this thread을 참조하십시오.

3

자세히 알아보기. 빌트인이나 커스텀의 속성은 클래스 나 클래스 멤버의 메타 데이터 일 뿐이며, 속성 자체는 아무 것도 연관되어 있지 않다.

  • 유형은 그것의 자신의 메타 데이터를 알고
  • 메타 데이터 (이 경우, 속성)가 자신이 속한 누구
1

불편하지만 어셈블리의 모든 클래스를 반복 할 수 있으며이 인스턴스가 "있는"사용자 지정 특성을 테스트 할 수 있습니다.

관련 문제