2017-04-14 51 views
3

我是C#的新手 - 這幾乎是我的第一個程序。我正在嘗試創建一些公共靜態變量和常量以在程序中的任何地方使用。我嘗試過的錯誤方式是將它們聲明在同一個命名空間的單獨的類中,但它們與主程序的上下文不同。這是一個WPF應用程序。代碼如下所示:在C中沒有正確設定靜態變量值#

namespace testXyz 
{ 
    class PublicVars 
    { 
     public const int BuffOneLength = 10000; 
     public static int[] Buff1 = new int[BuffOneLength]; 

     public const int BuffTwoLength = 2500; 
     public static int[] Buff2 = new int[BuffTwoLength]; 

     private void fillBuff1() 
     { 
      Buff1[0] = 8; 
      Buff1[1] = 3;   
      //etc 
     } 

     private void fillBuff2() 
     { 
      Buff2[0] = 5; 
      Buff2[1] = 7;   
      //etc 
     } 
    } 
} 

第二個文件:

namespace testXyz 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     public static int isInContext = 0; 
     int jjj = 0, mmm = 0; 

     private void doSomething() 
     { 
      isInContext = 5; // this compiles 
      if (jjj < BuffOneLength) // "the name 'BuffOneLength' does not exist in the current context" 
      { 
       mmm = Buff2[0]; // "the name 'Buff2' does not exist in the current context" 
      } 
     } 
    } 
} 

我實際的程序是更長的過程。我完全按照所示創建了上述WPF應用程序來測試此問題,並且我得到了這些錯誤,這些錯誤也發生在真正的程序中。我真的不想在主程序中填充數組,因爲它們很長,這意味着很多滾動。我也想有一個地方可以聲明某些公共靜態變量。什麼是正確的方法來做到這一點?

+0

我不明白你爲什麼要聲明同一個命名空間的兩倍? – dcg

+0

這兩個塊位於項目中的兩個不同的.cs文件中。 Visual Studio生成名稱空間聲明。我在上面的例子中添加了它們。 – Moonling

+0

好的!沒有閱讀任何地方,所以假設在同一個文件中。 – dcg

回答

8

您必須要麼指定

// BuffOneLength from PublicVars class 
if (jjj < PublicVars.BuffOneLength) { 
    ... 
    // Buff2 from PublicVars class 
    mmm = PublicVars.Buff2[0]; 

或把using static

// When class is not specified, try PublicVars class 
using static testXyz.PublicVars; 

namespace testXyz { 
    public partial class MainWindow : Window { 
    ... 

    // BuffOneLength - class is not specified, PublicVars will be tried 
    if (jjj < BuffOneLength) { 
     mmm = Buff2[0]; 
2

您不能訪問一個靜態變量是另一個類僅通過調用變量。你需要先去通包含在你的情況下,類那將是

PublicVars.BuffOneLength 

PublicVars.Buff2[0] 
+0

謝謝。這回答了它。我將在類名前加上變量。 「使用靜態」將是一個不錯的選擇,但我只有VS 2013 ... – Moonling