Создание Instance для доступа c#

163
14 января 2019, 02:40

Доброго времени суток.

В своих проектах использую конструкцию для доступа к MainWindow из других классов. И вот задался вопросом насколько это правильно и безопасно использовать. Если не безопасно, то если способы обезопасить?

Видел много аналогов этому, ни все они не такие простые и удобные.

 public static MainWindow Instance;
 public MainWindow()
 {
    InitializeComponent();
    Instance = this;
 }
 MainWindow.Instance.List.ItemsSource = null;
Answer 1

Поскольку главное окно в приложении по определению одно, использовать синглтон для него нормально. Но делать это нужно правильно. Не используйте публичное поле (его можно случайно изменить в любом месте программы), вместо этого заверните его в get-only свойство:

static MainWindow _Instance = null;
public static MainWindow Instance
{
     get { return this._Instance;}
}

Также необходимо сделать защиту от повторного создания объекта (если код написан в предположении, что существует только один объект, случайное повторное его создание может все сломать). Сделать конструктор закрытым скорее всего не получится, так как отвалится дизайнер форм, но можно проверять, что окно уже создано, и бросать исключение.

READ ALSO
Управление контролами из ViewModel

Управление контролами из ViewModel

Простите за глупый вопрос, но что я делаю не так?

134
Непонятное поведение Phemto

Непонятное поведение Phemto

Метод show вызывается 2 разаОдин раз когда $message равен NULL и второй раз после того как через setMessage передан объект класса HelloMessage

134
php imageresolution

php imageresolution

В php есть функция http://phpnet/manual/ru/function

169
не могу настроить Bitrix Rss

не могу настроить Bitrix Rss

Не могу настроить модуль на импорт rss в битриксе, вот часть кода:

212