如何从方法中实例化全局或 public 对象? C#

How to Instantiate a global or public object from within a method? C#

我研究这个已经一个多星期了,但我很困惑。

我在 windows 中使用多个表单。每个表单都驻留在自己的命名空间中。在下面的代码中,我实例化了 class Robo_Pass 的新形式。它驻留在命名空间 Space_Pass 中。我正在使用的表单是 class Overseer,驻留在命名空间 Robo_Pi.

请注意,使用多个命名空间不是问题所在。这么多工作就好了。

在这个节目中我和:

使用Space_Pass; (我这样做是为了访问 Robo_Pass 而无需指定它所在的名称空间。

这是我的代码:

        public void Btn_Robo_Pass_Click(object sender, EventArgs e)
        {
            // Check to see if this Namespace/Form is open.
            bool test = check_App_Open("Robo_Pass"); 
            if (test == false) // if not, then create it. 
            {
                Robo_Pass pass = new  Robo_Pass();
                // set up event handler for when this form closes
                pass.FormClosed += Btn_Apps_Click;
                pass.TopMost=true;      
                pass.Show();        
                btn_Apps_.PerformClick();
            }
            else // If already open, then just call Window_Show(). 
            {
                Window_Show("Robo_Pass");
                btn_Apps_.PerformClick();               
            }   
        }

唯一有问题的行是:

                Robo_Pass pass = new  Robo_Pass();

有什么我可以添加到这一行以使这个名为 "pass" 的对象成为程序其余部分的全局对象。

换句话说,从这个 class 中的其他方法,我希望能够像这样调用其他表单上的方法:

pass.method(variable);

如果我在方法之外创建对象 "pass",我实际上可以做到这一点。 换句话说,如果我将以下代码移到它起作用的任何方法之外:

                Robo_Pass pass = new  Robo_Pass();

然后我可以使用

访问其中的方法
pass.method(variable);

但我需要在最初显示的按钮单击方法中创建此对象。

所以我的问题是这样的。

有什么方法可以在那个按钮方法中创建这个对象,并让这个对象在其他方法中可用。

我尝试添加静态、public、全局等关键字。但是我的 IDE 拒绝了所有在这种情况下的人。

所以我不知道如何让这个名为 "pass" 的对象可用于此 class 中的其他方法。

正如我所说,如果我在方法之外实例化它,它就像一个魅力。但不能那样做。我需要能够使用按钮实例化它。

注意:对于此 post 中的任何格式错误或拼写错误,我深表歉意。我不 post 经常来这里,但我真的被这个难住了。希望这是一个简单的修复。我只是不知道该怎么做。

将变量声明移到您的方法之外并使其成为 public,然后在您的方法中实例化它:

public Robo_Pass pass = null;

public void Btn_Robo_Pass_Click(object sender, EventArgs e)
{
  ...
  pass = new  Robo_Pass();
  ... 
}

您现在可以通过 class:

的实例访问它
var yourClass = new YourClass();
yourClass.pass.method(variable);

如果您希望它在不创建 class 的对象的情况下可用,请将其设为静态:

public static Robo_Pass pass = null;

那么你只要调用YourClass.pass.method(variable)就可以得到它。请记住先确保它已被初始化,或者检查它是否仍然为空。