ссылка на другие методы класса без создания нового экземпляра - PullRequest
4 голосов
/ 16 ноября 2010

У меня есть класс, который называется clientChat, который выполняет основные сетевые функции. У меня есть несколько других классов, связанных с различными формами окон. В моей первой форме у меня есть переменная, относящаяся к классу чата, например:

clientChat cc = new clientChat();

Все работает хорошо, класс инициализирован, и все в движении. После того, как первые формы выполнены, выполняя свои обязанности, я поднимаю вторую форму, которая явно связана с новым файлом класса.

Теперь мой вопрос: как я могу сослаться на то, что происходит в классе clientChat, не устанавливая новый экземпляр класса? Мне нужно передать данные из формы в networkstream, и если я создам новый экземпляр класса, не потребует ли это нового подключения к серверу и, в основном, потребуется все, чтобы начать все сначала, поскольку он «новый»? Я немного сбит с толку, и любая помощь будет отличной, спасибо. C # на .NET4.0

Ответы [ 4 ]

3 голосов
/ 16 ноября 2010

Вы можете создать экземпляр clientChat в начале вашей программы, а затем просто передать его ссылку нужным классам.

3 голосов
/ 16 ноября 2010

Возможно, вы захотите взглянуть на шаблон проектирования Singleton.Г-н Скит написал хорошую статью о том, как реализовать его в C # здесь. (Просто используйте версию 4. Она самая простая и отлично работает =))

1 голос
/ 16 ноября 2010

Предположительно, вы бы либо:

  1. Создайте объект из кода, который создает и показывает обе формы, и передайте ссылку на тот же экземпляр в обе формы, или:
  2. Если вы создаете вторую форму из первой формы, передайте ссылку на экземпляр, на который ссылается первая форма, как-то во вторую (например, через свойство или конструктор).
0 голосов
/ 16 ноября 2010

В дополнение к ответу @ Jens, на связанной странице есть 5 подходов, хотя я думаю, что у нас есть 6 подходов, использующих Lazy<T> в C # 4.0

public sealed class Singleton
{
    private Singleton() { }
    private static readonly Lazy<Singleton> m_instance = new Lazy<Singleton>(() => new Singleton());
    public static Singleton Instance
    {
        get
        {
            return m_instance.Value;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...