2013-06-18 5 views
1

여러 C# 파일에서 인스턴스화해야하는 변수에 액세스하는 기본 방법은 무엇입니까?여러 C# 파일에서 인스턴스 변수에 액세스

예를 들어, 한 파일에서 사전을 선언 할 수 없으며 메서드에서 메서드로 전달되지 않는 한 다른 파일에서 사용할 수 없습니다.

바이트 배열에도 동일한 문제가 있습니다.

나는 주로 C++ 코더이며 이러한 문제는 포함 파일이나 extern 선언에 의해 처리됩니다.

C#의 '작은'변수는 전역 변수 일 수 있습니다. 그러나이 옵션은 사전 지식이나 바이트 배열처럼 인스턴스화해야하는 변수에서는 불가능합니다.

미안하지만, 내 책이나 인터넷에서 해결책을 찾을 수 없습니다. 저는 이미 같은 프로젝트의 두 C# 파일에서 사전을 사용하지 않고도 사전을 사용하는 방법을 찾는 데 많은 시간을 낭비했습니다.

시도하고 문제에 대한 더 자세한 될하려면

이 MainWindow.xaml.cs를의 선언입니다 :

public partial class MainWindow : Window 
{ 
    public static byte[,] TerrainMap; 

을하지만 다른 파일 PlantDisplay.xaml에 액세스하려고 할 때. CS0103 : 이름 'TerrainMap'이 현재 컨텍스트에 존재하지 않습니다.

+2

'예를 들어, 사전은 한 파일에서 선언 될 수없고, 메소드에서 메소드로 전달되지 않는 한 다른 파일에서 사용될 수 있습니다 .' false. public static으로 만들고 코드의 아무 곳에 나 사용할 수 있습니다. – PoweredByOrange

+1

정의 된 클래스 이외의 클래스에서 사전을 사용할 수 있도록 하시겠습니까? 또는 하나의 클래스를 여러 파일로 분할하고 싶습니까? 클래스는 파일이 아닌 논리적 단위입니다. –

+0

와우! 정말?!?!?! 열거 형은 어떻습니까? – zetar

답변

1

필요한 변수를 정적 (공용)으로 설정하십시오.

나중에 원하는대로 변경할 수 있습니다. 을 정적으로 선언하고 어디서나 "인스턴스화"합니다.

class MyClass 
{ 
    public static Dictionary<int, string> dictionary; 
} 

그리고 어느 곳 :

아마도 당신이 정적 멤버을 찾고
MyClass.dictionary = new Dictionary<int, string>(); 
//... 
1

:

public class SomeClass 
{ 
    public static IDictionary<string, string> SomeAccessibleDictionary = new Dictionary<string, string> 
    { 
     { "dictionary", "data" }, 
     { "key", "value" },   
    } 
} 

이 샘플에 액세스 할 수 :

SomeClass.SomeAccessibleDictionary 
0

클래스의 public static은 어디서나 액세스 할 수 있습니다. C#을 사용하면 파일간에 선언 된 형식에 액세스 할 수 있습니다. C#과 다른 점은 C#이 타입 이름을 해석 할 수있는 한 타입이 존재하는 한, 헤더 나 다른 것을 # 포함 할 필요가 없다는 것입니다.

그렇기 때문에 공공 정적 필드에 액세스하는 것은 종종 나쁜 디자인의 표시입니다. 때로는 그것들이 필요하고 삶을 편하게 해줄 수 있지만 종종 일을하는 더 좋은 방법이 있습니다.

+0

나는 그것을 시도했다. 컴파일러는 그것을 구입하고 있지만, 런타임에서 "PlantMap이라는 이름이 현재 조건에 존재하지 않습니다."라고 충돌 할 때 다음과 같이 액세스합니다 : MainWindow.PlantMap [x, y] .Name = name; – zetar

1

사용 Partial classes :

파일 myclass1.CS :

public partial class MyClass 
{ 
    public SomeObject SomeProperty {get;set;} 
} 

파일 myclass2.cs이 : 컴파일 할 때

public partial class MyClass 
{ 
    private void SomeMethod() 
    { 
     var myprop = this.SomeProperty; 
    } 

} 

, 이러한 코드 2 개 별도의 조각은 하나의 클래스로 컴파일됩니다.

3

사전을 정적으로 만들 수는 있지만 디자인이 좋지 않은 것처럼 보입니다. 객체 지향적 인 perspecitve에서 더 나은 대안은 GetValue/SetValue 메소드를 가진 ISettingsProvider과 같이 의미있는 이름을 가진 별도의 인터페이스에 사전을 구성하는 데 필요한 함수를 넣고이를 필요로하는 다른 클래스의 생성자에 전달하는 것입니다.

또한 종속성 삽입을 사용하여이 클래스들을 서로 연결할 수 있습니다.

관련 문제