如何解决从函数内部声明全局变量?
| 这是我的代码: 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对象执行相同的操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。