1

我对全局变量进行了一些研究,并提出静态变量应该能够解决我的问题的事实。不过,我不明白如何制作这些。我该怎么做?另外,如果静态变量不能解决我的问题,我应该使用什么?

我希望能够从另一个表单访问我的主要表单中的字符串、bool 和 int。帮助?

4

3 回答 3

3

静态变量(或者更好的是,属性)可能会起作用。您可以将其声明为:

// In Form1 (could be internal or public)
public static bool SomeBool { get; set; }

然后,要访问,您将使用Form1.SomeBool = true;orif (Form1.SomeBool) {等​​。

话虽如此,不鼓励这样的“全局”数据是有原因的——通常有一些更好的方法来处理这个问题。例如,您可能希望创建一个自定义类来保存您的数据,并在创建新表单时将对该类实例的引用传递给新表单。

于 2012-06-01T01:30:21.557 回答
0

不仅是静态的,它必须是public static. 您可以像任何其他变量一样简单地声明它,如public static int x = 1;. 然后您可以像 一样访问它ClassFoo.x,但您也必须处于静态上下文中。

于 2012-06-01T01:30:05.233 回答
0

如果您希望每个表单实例(对象)保存此信息,那么您不想使用静态字段。另一方面,如果您想要获得一些可以从您的班级形式的任何实例(它是共享的)访问的信息,或者换句话说,您只想拥有这些信息一次......那么是的,使用静态字段。

你想要做的是这样的:

//partial because I take you are using a form designer.
//and also because the class is gonna have more things than those showed here.
//in particular the example call a method "UseFields" that I did not define.
public partial class MyForm: form
{
    private static bool boolField;
    private static string stringField;
    private static int intField;

    private void Method()
    {
         //Do something with the fields
         UseFields(boolField, stringField, intField);
         UseFields(IsBoolFieldSet, SomeString, SharedInformation.SomeInt);
    }

    //You can also wrap them in a property:
    public static bool IsBoolFieldSet
    {
        get
        {
            return boolField;
        }
        //Don't put a set if you want it to be read only
        set
        {
            return boolField;
        }
    }

    //Or declare an static property like so:
    public static string SomeString { get; set; }
}

//Another good option is to have this information in a separate class
public class SharedInformation
{
    public static int SomeInt { get; set; }        
}

Please take care with shared state, in particular in a multithreaded enviroment, because this information may be changed without notice by another object that also has access.

于 2012-06-01T01:36:25.913 回答