2010-02-17 2 views
6

이것은 기본 것처럼 보이지만 매우 사소한 것입니다. 정적 클래스 (즉, 콘솔 응용 프로그램)로 전역 변수를 설정하는 것이 어떻습니까?정적 메서드의 전역 변수

좀 더 많은 배경 지식을 얻으려면 변수를 가져 오거나 설정하기를 원하는 몇 가지 맞춤 이벤트 처리기를 호출하는 것이 가장 좋습니다.

귀하가 갖고있는 아이디어 나 제안에 감사드립니다.

+9

개인적으로 어휘에서 "전역 변수"라는 문구를 지울 것을 권장합니다. – Aaronaught

+6

향후 참조를 위해, 사소한 것, 당신은 단순한 것을 발견했습니다. – NerdFury

답변

9

가장 간단한 방법은 공공 정적 필드를 만듭니다

public static Object MyGlobalVariable; 

입니다. 좀 더 나은 점은 다음과 같습니다.

public static Object MyGlobalVariable { get; set; } 

public static 속성을 만듭니다.

+1

재산이 조금 더 나은 이유는 무엇입니까? – IllidanS4

+0

@ IllidanS4, 내가 stackoverflow.com/questions/653536/difference-between-property-and-field-in-c-sharp-3-0/653799 –

+0

나는 차이점을 알고 있지만 객관적으로 정적 필드보다 정적 속성입니까? – IllidanS4

1

100 % 확신 할 수는 없지만 변수를 저장하는 데 싱글 톤을 사용해보십시오. 당신이 달성하고자하는 것을 알지 못한다면이 솔루션이 당신을 길들이게하지 않을 것을 추천하는 것이 어렵습니다.

http://www.yoda.arachsys.com/csharp/singleton.html

13

는 C#에서 전역 변수가 없습니다. 변수는 항상 지역 범위입니다. 코드의 기본 단위는 클래스이며, 클래스 내에는 필드, 메소드 및 속성이 있습니다.

당신 일부 클래스의 공용 정적 필드 나 속성을하여 "전역 변수"를 모방 할 수 있지만 안된다. C#은 아주 좋은 이유로이 작업을 어렵게 만듭니다. 전역 변수는 순수한 악입니다. 그것들은 OO 디자인의 몇 가지 좋은 원칙 인 캡슐화, 느슨한 결합, 높은 응집성을 위반합니다.

나는 이것이 초보자 용 질문이라는 것을 알고 있지만, 이라고 생각한다.이 말을하는 것이 중요하다는 초보자 용 질문이다. 이제는 C#에서 어떤 전술이 적극적으로 낙담하거나 심지어 위험한 지 배우기 시작할 때가 가장 좋으며 정적 변수/필드를 전역 변수로 사용하는 것은 약 6 개입니다. 이러한 구조에는 합법적 인 용도가 있지만 장소간에 데이터를 전달하는 것은 그 중 하나가 아닙니다.

두 개의 서로 다른 클래스가 동일한 정보에 의존하면 은 정보를 소스에서 대상인으로 전달합니다. 이것은 보통 생성자를 통해 또는 호출되는 메소드에 대한 인수로 수행됩니다. 이 정보를 진정 "소유"하는 인스턴스는 항상 하나만 있어야합니다. 정보를 "글로벌하게"만드는 것은 주어진 시점에서 누가 또는 무엇에 의존 할 수 있는지 추론 할 수 없음을 의미합니다.

이것을 고려하여 전역 변수에 저장하려는 정보를 공유 할 수있는 다른 방법 (예 : 생성자 또는 메소드에 인수로 제공)에 대해 생각해보십시오. 확실하지 않은 경우 게시하려는 내용을 게시하고 Google에서 도와 드리겠습니다.

+0

정교하게 고맙습니다. 매우 도움이되었습니다. –

+0

두 개의 스레드가 주 스레드에서 동시에 멀리 떨어져서 실행 중이며 두 스레드 중 하나에서 오류가 발생하면 오류 수를 늘리고 싶습니다. 그러면 어떻게 될까요? – user20358

+0

@ user20358 : 솔루션을 추천하기에 충분하지 않습니다. 스레드는 무엇을하고 있습니까? 왜 그들은 실패 할까? 실패의 결과는 무엇입니까? 그 (것)들을 벌채하거나 후속 조치를 취하는 것과는 반대로 * 카운트하는 것이 정확히 무엇입니까? 문제를 명확히하고 새로운 질문을해야합니다. – Aaronaught