Как избежать, чтобы несколько экземпляров окон сформировались в c#

Если Вы задаетесь вопросом конкретно о примерах в FAQ JUnit, такой как шаблон базового теста , я думаю лучшая практика, представляемая существует то, что класс под тестом нужно инстанцировать в Вашем методе установки (или в методе тестирования).

, Когда примеры JUnit создают ArrayList в методе установки, они все продолжают тестировать поведение что ArrayList, со случаями как testIndexOutOfBoundException, testEmptyCollection, и т.п.. Перспектива там имеет кого-то пишущего, что класс и удостоверяющийся его работает правильно.

необходимо, вероятно, сделать то же при тестировании собственных классов: создайте свой объект в установке или в методе тестирования, так, чтобы Вы смогли получить разумный вывод при повреждении его позже.

, С другой стороны, при использовании класса набора Java (или другого класса библиотеки, в этом отношении) в тестовом коде, это, вероятно, не потому что Вы хотите протестировать его - это - просто часть тестового приспособления. В этом случае можно безопасно предположить, что это работает, как предназначено, так инициализация его в объявлении не будет проблемой.

Если это имеет значение, я продолжаю работать довольно большое, несколько-лет, разработанная из TDD кодовая база. Мы обычно инициализируем вещи в их объявлениях в тестовом коде, и в году с половиной, что я был на этом проекте, он никогда не вызывал проблему. Таким образом, существует по крайней мере некоторая неподтвержденная информация, что это - разумная вещь сделать.

9
задан Oliver 10 September 2009 в 06:21
поделиться

5 ответов

реализуют шаблон Singleton

пример: CodeProject: простые одиночные формы (хорошо, это в VB.NET, но просто чтобы дать вам подсказку)

11
ответ дан 4 December 2019 в 07:47
поделиться

Да, у него есть одноэлементный шаблон,

Код для создания одноэлементного объекта,

public partial class Form2 : Form
{
 .....
 private static Form2 inst;
 public static Form2  GetForm
 {
   get
    {
     if (inst == null || inst.IsDisposed)
         inst = new Form2();
     return inst;
     }
 }
 ....
}

Вызвать / показать эту форму,

Form2.GetForm.Show();
9
ответ дан 4 December 2019 в 07:47
поделиться

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

0
ответ дан 4 December 2019 в 07:47
поделиться

Вы можете проверить существующие процессы перед открытием формы:

using System.Diagnostics;

bool ApplicationAlreadyStarted()
{
  return Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length == 0;
}

Я не знаю, влияет ли метод GetProcessesByName на UAC или другие меры безопасности.

-2
ответ дан 4 December 2019 в 07:47
поделиться

Синглтоны не являются объектно-ориентированными. Это просто объектная версия глобальных переменных. Что вы можете сделать, так это сделать конструктор класса Form закрытым, так что никто не может случайно создать один из них. Затем вызовите отражение, преобразуйте ctor в public и убедитесь, что вы создали один и только один его экземпляр.

-1
ответ дан 4 December 2019 в 07:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: