2013-02-19 4 views
0

나는 배열의 행 수를 정의하기 위해 Variables.rows이라는 정적 변수를 사용하는 정적 배열을 가지고 있습니다. Variables.rowsVariables이라는 다른 정적 클래스에 정의되어 있습니다.어디에서나 배열에 액세스하기

public static class TheArrayClass 
{ 
    public static double[,] HiThere = new double[Variables.rows, 6]; 
} 

내 문제는 정적 배열 즉시 실행에서 프로젝트 (내가 믿는)을 를 만든 것입니다. 즉, 올바른 값을 Variables.Rows에 할당하는 데 필요한 메소드가 시간에 실행되지 않습니다. 즉, 배열의 크기가 올바르지 않기 때문에 배열을 채울 때 인덱스 오류가 발생합니다.

내 코드에서 아무 곳에서나 배열에 액세스 할 수 있도록이 방법이 필요합니다.

+0

여기서'Variables.Rows'는 정의 되었습니까? –

+1

그리고 rows 속성은 어디에서 왔는가? 배열이 정적 일 필요가있는 이유는 무엇입니까? – Jodrell

+1

전역 변수를 사용하는 어려운 아이디어. 언어를 처음 사용하는 사람에게 어떻게하는지 묻는다면 읽을 수 있고, 전역 변수를 사용하지 않는 방법을 찾으십시오. –

답변

1

Variables.Rows이 정의 된 곳을 표시하지 않은 것은 흥미로운 일입니다. 어느 쪽이든, 당신은 classe의 생성자에서 원하는 초기화를 수행 할 수 있습니다.

public static class TheArrayClass 
{ 
    public static double[,] HiThere; 

    static TheArrayClass() 
    { 
     HiThere = new double[Variables.rows, 6]; 
    } 
} 
+1

클래스가 정적이므로 생성자가 작동하지 않습니다. 타입 초기화 자 ('static TheArrayClass()')를 만들어야합니다. 그렇지 않으면 괜찮아 보입니다. –

+1

@ p.s.w.g 웁스! 'static' 키워드를 잊어 버렸습니다. –

+1

@ Johnathan-Wood : 형식 이니셜 라이저는 액세스 한정자를 지원하지 않습니다. 'public'을 버리면 당신은 선전합니다. –

0

디자인 문제가 있다고 생각합니다. 문제를 해결하는 데 도움이되는 몇 가지 정보를 추가하려고합니다.

먼저 정적 클래스는 프로젝트가 실행되는 즉시 생성됩니다. 그러나 정적 클래스에는 프로젝트가 실행되는 즉시 한 번 실행되는 정적 생성자 (variables.rows를 정의 할 수 있음)가있을 수도 있습니다.

ArrayList (http://msdn.microsoft.com/en-us/library/system.collections.arraylist.aspx) 또는 GenericList (http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx)를 사용하면 배열 변수 제한 (예 : 크기 변경)을 쉽게 피할 수 있습니다.

+0

그래, 모두들 세계가 끔찍하다고 말하지만, 불행히도 지금은 많은 새로운 문서를 읽을 시간이 없다. 그래도 링크를 가져 주셔서 감사합니다. – user1920206

+1

남자, 그렇지 않습니다. 글로벌은 위험하며 위험한 사람들은 피하는 것을 선호하지만 이유는 있습니다. 이유는 유용하기 때문입니다. 그러나 여전히, 귀하의 프로젝트에 뭔가 잘못되었다고 생각합니다. – lolol

+0

@ user1920206 살펴보기 : http://stackoverflow.com/questions/12306106/is-it-bad-form-to-try-and-have-classes-other-than-main-form1-interact-with-each/12306400 # 12306400 – lolol

2

양식간에 메시지 전달을 시도하십시오.

public partial class Form1 : Form 
{ 
    private string _data; 

    public Form1() 
    { 
     InitializeComponent(); 
     _data = "Some data"; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     var form2 = new Form2(); 
     form2.Data = _data; 
     form2.Show(); 
    } 
} 

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public string Data { get; set; } 
} 
+0

그는 양식에 대해 어디에서 이야기하고 있습니까? – lolol

+0

@lolol 질문에 대한 의견을 확인하십시오. 그는 자신의 폼 사이에서 데이터를 전달하기 위해 전역 정적 변수를 사용하기를 원합니다. – Romoku

+0

댓글을 찾을 수 없지만 당신을 신뢰합니다. 나는 내 downvote를 바꿀 것입니다. 죄송합니다. – lolol

관련 문제