2017-04-14 21 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