Работа с отдельными классами, глобальный / статический класс? - PullRequest
4 голосов
/ 02 марта 2010

Скажем, у меня есть два отдельных класса, A и B.

У меня также есть класс репозитория C, который загружает некоторую информацию из текстового файла. Например. У него есть методы loadLines(), addLine(), deleteLine().

Игнорируя привязку данных, как я могу заставить A и B работать на одном и том же классе C. Возможно ли это?

Например, на данный момент в формах классов A и B у меня есть:

var classC = new C();

Это вызывает повторное выполнение. Было бы намного лучше, если бы у меня была одна копия класса с для работы с А или В.

edit: так что с использованием синглтона, когда выполняется конструктор класса C? - какой класс сначала его создаст? и это происходит только один раз, когда я его принимаю?

edit1: означает ли использование одноэлементного шаблона, что в вашем проекте должно быть только одно из них? Могу ли я иметь несколько?

Ответы [ 2 ]

6 голосов
/ 02 марта 2010

Вы можете использовать шаблон Singleton или, если вы хотите пойти по пути инфраструктуры Dependency Injection (что гораздо больше, чем просто создание синглетонов, но стоит посмотреть), большинство контейнеров DI имеют возможность создать только один экземпляр объекта.

class C {

    public static readonly C Instance = new C();

    private C() {
    }

}

Тогда вы бы использовали это как:

private void A_Load(object sender, EventArgs e) {
    var classC = C.Instance;
}

private void B_Load(object sender, EventArgs e) {
    var classC = C.Instance;
}
1 голос
/ 02 марта 2010

Если вы хотите убедиться, что у вас когда-либо работает только один экземпляр класса C, вы можете использовать singleton pattern .

Сделав конструктор класса C закрытым и имея открытый статический метод, который позаботится о предоставлении вам правильного экземпляра C, вы можете гарантировать, что A и B всегда будут получать один и тот же экземпляр:

public class C
{
    private static C instance;

    private C()
    {
        // do some stuff
    }

    public static C GetInstance()
    {
        if(instance==null)
           instance = new C();

        return instance;
    }
}

В A и B вы можете сделать:

C theSameInstanceOfC = C.GetInstance();
...