объявить глобальные переменные внутри функции? - PullRequest
0 голосов
/ 15 апреля 2011

Вот мой код:

    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.

Как вы думаете, что может быть лучшим способом сделать это?

Спасибо!

Ответы [ 4 ]

1 голос
/ 15 апреля 2011

Лучшее, что можно сделать для решения проблемы такого типа, - это создать класс, содержащий статические члены, чтобы вы могли устанавливать и получать значения из него. Таким образом, вы можете получить к нему доступ из любого места, которое может видеть класс, делая его «глобальным». Как это:

public class ApplicationController
{
    public static IfaceClient2Server Server { get; set; }
}

Вы можете выбрать реализацию пользовательских get и наборов для предотвращения проблем или создать объект как часть статического конструктора класса.

1 голос
/ 15 апреля 2011

Объявите ее как переменную-член (она не должна быть глобальной ...) Есть ли какая-то проблема, с которой вы пытаетесь разобраться, из-за которой вы не хотите использовать такой подход?

1 голос
/ 15 апреля 2011

Я предпочитаю создавать ленивое загруженное свойство с частным установщиком.В этом контексте это будет означать, что вам придется делать то же самое с вашим объектом cf, который создает srv.

1 голос
/ 15 апреля 2011

Вам нужно сделать его переменной экземпляра.

public class Foo
{
  private string instanceVariable;


  public void Set(string s)
  {
    instanceVariable = s;
  }
  public string Get()
  {
    return instanceVariable; //same value as "s" in "Set"
  }
}

Примечание. Для внешних переменных используйте свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...