Выполнение фрагмента кода только один раз в классе - PullRequest
0 голосов
/ 05 марта 2012

Мне нужно прикрепить обработчик событий к объекту, и я поместил этот код в событие нажатия кнопки. Однако я заметил, что это приведет к тому, что одно и то же событие будет прикрепляться несколько раз с каждым кликом.

Есть ли способ запустить кусок кода при создании класса? Рассматриваемый класс является статическим классом между прочим.

Я могу сделать что-то вроде:

if (bool == false)
{
attach event handler;
bool = true;
}

Просто не уверен, что это правильный способ сделать это. Спасибо.

Ответы [ 3 ]

3 голосов
/ 05 марта 2012

Есть статические конструкторы , которые (в принципе) запускаются только один раз для каждого класса.

Примерно так:

public static class MyStaticClass
{
   public static int MyStaticProperty;

   //no accessors required, as this is never explicitly invoked
   static MyStaticClass() //no parameters either
   {
      MyStaticProperty = 100;
   }
}
....
//writes: 100
Console.WriteLine(MyStaticClass.MyStaticProperty);

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

3 голосов
/ 05 марта 2012

Вы используете конструктор - он будет работать при создании класса.

Конструкторы - это методы класса, которые выполняются при создании объекта класса или структуры. Они имеют то же имя, что и класс или структура, и обычно инициализируют элементы данных нового объекта.

Для статических классов используйте статические конструкторы :

Статический конструктор используется для инициализации любых статических данных или для выполнения определенного действия, которое необходимо выполнить только один раз. Он вызывается автоматически перед созданием первого экземпляра или ссылками на любые статические элементы.

1 голос
/ 05 марта 2012

1001 * попробовать *

if(Button1.Click == null)
  Button1.Click += new System.EventHandler(this.myEventHandler);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...