2015-02-06 2 views
0

조건부 메소드가 클래스 속성에 대한 조건을 가질 수 있는지 궁금합니다. 예를 들어클래스 속성에 따른 조건부 메소드

다음 [Conditonal("DEBUG")]처럼

class Class1 
{ 
    public bool _doStuff; 

    [Conditional(_doStuff)] 
    public static void Stuff() { 
     // Do the stuff 
    } 
} 

.

누구든지 알고 있나요?

+2

아니요. 실제로 어떤 문제를 해결하려고합니까? –

+0

번호는 메타 데이터이며 클래스 인스턴스를 참조 할 수 없습니다. 컴파일 타임 상수로 초기화해야합니다. –

+0

조건부 메서드가 클래스 특성에 대한 조건을 가질 수 있는지 궁금합니다. "당신이 의미하는 바를 추측합니다. - 조건부 컴파일 특성이 있는지 궁금합니다. 메서드 조건부 컴파일에 사용하는 것과 같습니다. –

답변

10

존재하지 않습니다. 더 요점은 비논리적입니다.

Conditional으로 표시된 방법은 조건이 충족되지 않으면 빌드 프로세스에 참여하지 않습니다. 이 결정은 런타임에 이루어질 수 없습니다.

코드가 작성되지 않았고 실행 파일 (또는 dll)에 해당 메서드가 포함되어 있지 않은 것처럼 코드가 생략되었습니다.

+0

또한 static 메소드를 호출 할 때 클래스 변수를 읽으려고 시도합니다 ... – Rawling

2

속성의 입력은 상수 여야합니다. 빌드시 생성자에 대한 입력으로 사용됩니다.

그래서이 경우에는 작동하지 않습니다.

변수를 통해 설정할 수있는 조건부를 정말로 원한다면 고유 한 속성 클래스를 작성하는 것이 좋습니다.

0

아니요.

1.) 생성 한 IL을 가로 채어 컴파일하고 원하지 않는 생성 된 IL 코드를 제거 할 수 있습니다. 살펴보기 - https://msdn.microsoft.com/en-us/library/system.reflection.emit.ilgenerator%28v=vs.110%29.aspx

2.) 클래스 정의와 클래스를 사용하는 모든 곳에서 사전 처리 태그를 사용하십시오.
예 :

#if test 
    internal class SomeClass 
    { 
     public void SomeMethod(){} 
    } 
#endif 

and : 
public static void main() 
{ 
#if test 
     var someClass= new SomeClass(); 
     someClass.SomeMethod(); 
#endif 

} 
+0

내 게시물을 읽었습니까? –

+0

질문이 정확하지 않습니다. –

+0

나는 너를 정확하게 이해 했는가? 그리고 그것은 네가 묻는 질문에 답한다. –

관련 문제