2

나는 ConditionalAttribute이 무엇인지 압니다.속성에 대한 ConditionalAttribute의 기능은 무엇입니까?

워드 프로세서가 Attribute에서 파생 않다면, 그것은 또한 클래스에 적용 할 수있는 말 :

[Conditional("DEBUG")] 
public class FooAttribute : Attribute { } 

을하지만 행동이 정의하는 방법을 속성합니까? (릴리스 빌드에서 제거 되었습니까?)

+0

또 다른 질문이 있습니다. http://stackoverflow.com/a/1412838/4730201 –

+0

@RicardoPontual 그게 문제를 해결하지 못합니다. 나는 그것이 특별히'Attribute'에 적용될 때 무엇을하는지 알고 싶다. –

+0

[ConditionalAttribute를 특성에 적용하면 조건부 컴파일 기호가 정의되어 있지 않으면 메타 데이터에 특성이 생성되지 않아야 함을 나타냅니다.] (http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute (v = vs.110) .aspx) 그게 무슨 뜻입니까 ?? –

답변

2

@ RicardoPontual의 의견은 나에게 아이디어를 제공했습니다.

내가이 짓 : 디버그 모드 컴파일

[Conditional("DEBUG")] 
public class FooAttribute : Attribute { } 

[Foo] 
public class Bar { } 

I, 그리고 ILSpy (가 디스어셈블러의)에서 DLL로드. 이 예상대로 내가 발견 무엇 :

[Foo] 
public class Bar { } 

가 그럼 난 릴리스 모드 컴파일 및 ILSpy에 그 DLL을로드. 이것은 내가 찾은 것입니다 :

public class Bar { } 

Bar 클래스가이 시간을 장식되지 않았습니다!

그래서 사용자 정의 속성을 Conditional으로 꾸밀면 그 속성 자체가 같은 방식으로 조건부가됩니다.

그게 내가 원하는 행동입니다. 나는 처음에 ConditionalAttribute에서 파생 된 것으로 생각했지만 봉인되었습니다. 대신 사용자 정의 속성을 꾸밀 필요가 있습니다.

+1

위대한, 테스트는 질문에 대답했다. 어셈블리가 컴파일 또는 릴리즈되었는지 여부에 따라 런타임에 로직을 구현하고 사용자 정의 속성의 존재 여부를 검사하는 것과 같은 유용한 것들을 상상해보십시오. 'if (typeof (MyType) .IsDefined (typeof (MyCustomAttribute)), false))' –

관련 문제