2011-04-12 4 views
0

내가 누른 버튼에 따라 변수를 true 또는 false로 설정하는 코드로 작성할 수 있습니까? 아래 예를 참조하십시오.C# if 지시문

그렇지 않은 경우 비슷한 효과를 내기 위해 어떤 다른 방법이 있습니까? 이미 지시어를 사용하여 다른 모드에 대한 코드를 표시했으며 개발자가 모드를 전환 할 수있는 옵션을 원하지만 이제 사용자에게 모드를 전환 할 수있는 옵션을 제공하고자합니다. 모드의 선택은 프로그램 시작시에만 주어지며 사용자는 모드를 전환 할 수 없습니다. 모드를 전환하려면 프로그램을 다시 시작해야합니다.

지시어를 사용할 수없는 경우 사용할 수있는 가장 빠른 방법은 무엇입니까? 내가 달성하고자하는 것의 pseduocode에서

: (주 문은 솔루션의 주위에 모두) :

void button_click(...){ 
    if(!CONDITION) 
     CONDITION = true; 
    else 
     CONDITION = false; 
} 


... 
#if CONDITION 
    //mode X with addtional steps 
#endif 

편집 : 4월 13일 - 당신은 처리기 지시문을 사용하는

+2

귀하의 질문에 명확하지 않습니다. 멤버 불린을 버튼으로 토글하고 싶습니까? – Matthew

+0

qn이 명확하지 않을 수 있습니다 ... if 지시문이 많은 프로젝트로 구성된 전체 솔루션 전체에 걸쳐 있다는 것을 의미했습니다. 그래서이 단축키가 사용자를 위해 기능을 구현하기 위해 버튼을 클릭하여 이러한 명령문의 실행을 토글하는 방법이 있는지 알아 보려고합니다. 이전에 이러한 진술을 실행할지 여부를 선택하는 것은 개발자 일 뿐이므로 현재 사용자에게 유연성을 부여하고 싶습니다. – yeeen

답변

5

추가 추가 정보를 원하시면 가능한 경우에도 목적을 이길 수있는 코드에서 설정하려고합니다 (저는 여러분이 할 수 없다고 확신합니다). 정규 부울 필드를 플래그로 사용하지 않는 이유는 무엇입니까?

private bool Condition {get; set;} 
0

코드의 조건에 따라 조건부 컴파일을 할 수 있는지 묻는다면 대답은 아니오입니다. 컴파일러는 컴파일 타임에 어셈블리에 포함 할 내용을 알아야합니다. 조건부 컴파일로 시도하고있는 것을 거의 확실하게 달성 할 수 있지만 무엇을하려고합니까?

+0

hv가 qn – yeeen

2

이것은 불가능합니다. if 문은 런타임에 실행되지만 #IF과 같은 전 처리기 지시문은 컴파일 타임에 실행됩니다. 컴파일 타임에 코드를 빌드하는 방법과 프로젝트의 어딘가에 (프로젝트의 속성에서 말하기) 또는 소스 파일의 맨 위에서 결정할 필요가 있습니다. CONDITION을 해당 빌드에 필요한 것으로 지정하십시오.

실제로 런타임 결정이 필요한 경우 모든 가능한 코드 경로를 포함하고 런타임에 어떤 코드 경로를 결정해야합니다.

+0

+1에 대한 자세한 설명을 작성했습니다. 귀하의 답변은 정말 포괄적입니다 ... –

+0

지시어를 사용할 수 없으면 어떻게 할 수 있습니까? 이 문장을 사용하여 코드의 모든 부분에 전역 변수를 사용하는 bool 검사를 추가 하시겠습니까? – yeeen

0

'#IF'지시문은 조건부 컴파일에 사용됩니다. 즉, 컴파일 타임에 정의 된 토큰을 찾고 문자 그대로 컴파일하거나 특정 코드를 컴파일하지 않습니다. 이것은 컴파일되지 않은 코드가 프로그램의 일부가 아니므로 런타임에 사용할 수 없음을 의미합니다. 런타임에 동작을 변경하려면 조건부 컴파일 대신 일반 플래그를 사용하도록 코드를 수정해야합니다. 즉, 구성 플래그를 기반으로하는 새로운 분기 기능을 추가하면 매우 복잡한 코드가 매우 빨리 발생할 수 있으므로 심층적 인 설계 검토를 고려할 수 있습니다.

0

이러한 지시문은 소스 파일의 섹션을 조건부로 건너 뛰고, 오류 및 경고 조건을보고하고 소스 코드의 고유 영역을 윤곽 지정하는 기능을 제공합니다. 런타임시 변경할 수 없습니다.

0

#IF 지시문은 사전 처리기 옵션이며 코드를 컴파일 한 후에는 아무런 의미가 없으므로 컴파일 후에 프로그램 흐름을 제어하는 ​​데 사용할 수 없습니다.

다른 옵션으로

, 당신은 부정적인 측면에, 당신의 코드는 에 통증이 끝나게 수 if CONDITION ... else ... 문 뒤덮 될 것이며, 오히려 쉽게 클래스 수준 변수로 변환 할 수 있지만한다 엉덩이를 관리 할 수 ​​있습니다.

또 다른 OOP 친화적 인 옵션은 State 패턴을 구현하는 것입니다. 각 "조건"의 동작을 자체 상태로 캡슐화하고 패턴 사이에서 전환 할 수 있습니다. 이것은 두 주 (아마도 가장 가능성이 높음)에 대한 과잉 공격 일 수 있습니다.

다른 참조 : http://www.dofactory.com/Patterns/PatternState.aspx

+0

나는 2 개의 diff 상태를 의미하는 것이 아니라 2 개의 diff 모드를 의미합니다. 하나의 모드는 더 많은 명령문을 실행 한 다음 다른 모드를 실행합니다. 나는 프로그램의 시작에서 모드의 선택 만 구현할 것이라고 생각하지 않는다. 프로그램을하는 동안이 아니라 문장을 초기화하는 것 ... 나는 hn에 더 많은 정보를 추가했다. pls는 그것을 체크 아웃한다. – yeeen

+0

@yeeen : State 패턴에 대한 링크를 다시 읽으십시오. 그것은 여전히 ​​당신이 원하는, 멋진, 깨끗한 방법을 커버합니다. –