如何在方法之间共享变量?

时间:2019-01-19 18:58:20

标签: c#

我已经统一编码了一下,但是我开始只使用C#。 但是,我注意到与统一不同,我不能放

Class Program{
public string blah = 5;
}

,然后在方法中使用它。 我为此做了一点测试:

using System;

namespace test
{
    class Program
    {
        public string test;

        public static void Main(string[] args)
        {
            test = "hi!!";
            Console.WriteLine(test);
            Main2();
            Console.ReadKey(true);
        }

        public static void Main2(){
            Console.WriteLine(test);
            Console.ReadKey(true);
        }
    }
}

然后回来说,非静态字段需要对象引用...

我知道我只能在一个方法中创建var,但是我似乎无法从其他方法中调用它。 那么如何做到这一点,以便可以从类中的所有方法中调用变量?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

因为您的方法是static。您需要使用实例方法(删除静态方法),或将包含class属性的public实例作为函数的参数传递。

例如:

using System;

namespace test
{
    public class Program
    {
        public string test;

        public static void Main(string[] args)
        {
            var program = new Program();
            program.test = "hi!!";
            Console.WriteLine(program.test);
            Main2(program);
            Console.ReadKey(true);
        }

        public static void Main2(Program program){
            Console.WriteLine(program.test);
            Console.ReadKey(true);
        }
    }
}

using System;

namespace test
{
    public class Program
    {
        public static string test;

        public static void Main(string[] args)
        {
            test = "hi!!";
            Console.WriteLine(test);
            Main2();
            Console.ReadKey(true);
        }

        public static void Main2(){
            Console.WriteLine(test);
            Console.ReadKey(true);
        }
    }
}

答案 1 :(得分:0)

您声明的变量是一个实例字段,这意味着仅该类的实例可以设置它(每个实例可以不同)。但是您使用的方法是static,并且它们无权访问任何实例字段(或方法)。

通常,解决此问题的方法是使变量staticstatic方法中使用:

class Program
{
    public static string test;

    public static void Main(string[] args)
    {
        test = "hi!!";
        Console.WriteLine($"Inside 'Main' method, 'test' == '{test}'");

        Main2();

        Console.Write("\nDone! Press any key to exit...");
        Console.ReadKey();
    }

    public static void Main2()
    {
        Console.WriteLine($"Inside 'Main2' method, 'test' == '{test}'");
    }
}