在控制台应用程序中访问其他类的变量c#

时间:2017-06-15 20:01:45

标签: c#

我似乎无法弄清楚以下内容: 对于学校项目,我需要运行一个简单的程序。该程序必须是一个控制台应用程序。但我需要一些类,我需要从主类中引用一个变量。

class Program
{
    public K[] ksmall = new K[number];
    static void Main(string[] args)
    {
         //do somethings with ksmall
    }
}

class K
{
   //something
}

class A
{
    public void SomethingElse()
    {
        //do something with ksmall
    }
}

我希望我的榜样有道理。所以无论如何,我如何从A类访问ksmall。当我开始创建Program的实例时,我得到空引用。有没有办法让两个类都能访问相同的 ksmall?

4 个答案:

答案 0 :(得分:1)

由于ksmall是非静态变量,因此静态函数(在您的情况下为Main)无法访问它。 因此,您可以将ksmall声明为 static

public static K [] ksmall = new K [number];

现在您可以从Main函数以及其他类函数访问ksmall“ Program.ksmall ”。

答案 1 :(得分:0)

您应该重新考虑项目的体系结构,例如一些OOP原则将为您提供更多工具。我建议您设计的类可以通过构造函数或方法中的参数传递要共享的对象。另外要小心封装你的类(私有是默认情况下,公共任何人,在同一名称空间内受保护,私有)。

我希望这可以帮助您更好地理解没有症状的问题。

答案 2 :(得分:0)

两种方法。 首先,您可以创建第三个静态类来保存ksmall(以及您希望将来从任何地方访问的任何其他变量)

class Program
{
    public K[] ksmall = new K[number];
    static void Main(string[] args)
    {
        VariableHolder.ksmall = new K[0];
    }
}

public class K
{
    //something
}

public class A
{
    public void SomethingElse()
    {
        //do something with ksmall
    }
}

public static class VariableHolder
{
    public static K[] ksmall = new K[number];
}

另一个选项是将ksmall作为参数传递给类中的方法。

    class Program
    {
      public K[] ksmall = new K[number];
      static void Main(string[] args)
        {
             A classAInstance = new A();
             classAInstance.SomethingElse(ksmall);
        }
    }

   class K
    {
        //something
    }

    class A
    {
        public void SomethingElse(K[] kSmall)
        {
                kSmall[1] = new K();
            //do something with ksmall
        }
    }

答案 3 :(得分:-2)

你需要公开K班。

public class K
{
   //something
}