我可以声明一个全局变量并从任何地方引用它而不引用它的类吗?

时间:2015-05-07 22:41:26

标签: c# global

我有一个C#控制台应用程序。例如,我希望主程序确定我是否处于DEBUG模式,并设置一个变量,比如... g_Bypass,每个类都可以引用它。

示例:

class test
{
    public static bool g_testMode;

    test()
    {
        g_testMode = true;  // read from the database.
        // more code...
        Object1 _obj = new Object1();
        // do more stuff with _obj...
    }
}

class Object1
{

    public Object1()
    {
        // constructor
        if (g_testMode)          // << I'd like to just refer to it this way!
        {
            // do something
        }
    }
}

2 个答案:

答案 0 :(得分:2)

没有。在.Net中,每个变量和方法都必须包含在一个类中。但是,可以使用全局范围访问静态公共成员,但在类外部使用时,必须使用类名称作为前缀。但是你可以打电话给你的班级g,而不是g_testMode你必须写g.testMode。虽然不鼓励使用小写的类名,但可能更好G.testMode

你的例子不如:

static class G //static is not necessary here
{
    public static bool testMode;
}
class test
{
    test()
    {
        G.testMode = true;  // read from the database.
        // more code...
        Object1 _obj = new Object1();
        // do more stuff with _obj...
    }
}

class Object1
{

    public Object1()
    {
        // constructor
        if (G.testMode)          // << I'd like to just refer to it this way!
        {
            // do something
        }
    }
}

答案 1 :(得分:1)

如果是调试模式,您担心可以通过执行以下操作在方法或类定义中的成员变量中创建局部变量:

#if DEBUG
    bool debug = true;
#else
    bool debug = false;
#endif

如果由于某种原因你想创建一个全局静态:

public static class Test {
#if DEBUG
    public static bool debug = true;
#else
    public static bool debug = false;
#endif
}

这需要在对象外部作为Test.debug

引用

您需要在项目的构建屏幕

中定义变量DEBUG

因为你可以做到这一点,并且意味着你应该做到!!!