从函数内部声明全局变量?

| 这是我的代码:
    private void connect()
    {
        try
        {
            textBox1.Text += \"connecting... \\r\\n\";
            button1.Enabled = false;

            DuplexChannelFactory<IfaceClient2Server> cf =
                    new DuplexChannelFactory<IfaceClient2Server>(
                        new CallbackImpl(),
                        new NetTcpBinding(),
                        new EndpointAddress(\"net.tcp://localhost:9080/service\"));

            IfaceClient2Server srv = cf.CreateChannel();
            srv.StartConnection(name); /// need to make this one global!
            textBox1.Text += name + \"connected!\\r\\n\"; 
        }
        catch
        {
            button1.Enabled = true;
            textBox1.Text += \"error connecting!\\r\\n\";
        }
    }


    private void sendMsg()
    {
        srv.Message_Cleint2Server(\"Hello!\");
        /// srv doesn\'t exist here.
    }
如您所见,服务器对象(srv)是通过connect()函数声明的,但是我当然需要此对象是全局的,以便能够从其他函数(例如sendMsg)访问它。好。 您认为什么是最好的方法? 谢谢!     
已邀请:
对于此类问题,最好的办法是创建一个包含静态成员的类,以便您可以设置并从中获取值。这样,您可以从任何地方访问该类,从而使该类成为“全局”。像这样:
public class ApplicationController
{
    public static IfaceClient2Server Server { get; set; }
}
您可以选择实现自定义的get和set以防止出现问题,或者将对象创建为类的静态构造函数的一部分。     
您需要使其成为实例变量。
public class Foo
{
  private string instanceVariable;


  public void Set(string s)
  {
    instanceVariable = s;
  }
  public string Get()
  {
    return instanceVariable; //same value as \"s\" in \"Set\"
  }
}
注意:如果要将变量暴露在外面,请使用“属性”。     
将其声明为成员变量(它不必是全局变量...)您是否正在尝试解决一些问题,从而使您不想采用该方法?     
我的首选是使用私有设置器创建一个延迟加载的属性。在这种情况下,这意味着您必须对创建srv的cf对象执行相同的操作。     

要回复问题请先登录注册