Пользовательские события для целых чисел - PullRequest
1 голос
/ 27 февраля 2011

Я знаю, как глупо это может звучать, но есть ли способ прикрепить событие к целому числу?

Например, если вы находитесь в цикле while и делаете: i ++; Можно ли вообще сделать что-то подобное?

int i;

Form1_Load(object sender, EventArgs e)
{
   i.MaximumNumberReached += new IntegerMaximumNumberReachedEventArgs();
}

while(x != y)
{
   i++
}

private void MaximumNumberReached(object sender, EventAgrs e)
{
   if(e.Value == 7)
   {
      this.Dispose(true);
   }
}

Или мне просто так перестать использовать свое воображение?

Спасибо

Ответы [ 3 ]

2 голосов
/ 27 февраля 2011

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

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

1 голос
/ 27 февраля 2011

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

private int someMeaningfulName;
public int SomeMeaningfulName {
    get { return someMeaningfulName; }
    set {
        // pre-validation checks and "changing" notification
        someMeaningfulName = value;
        // side effect code and "changed" notification
    }
}
0 голосов
/ 27 февраля 2011

Методы расширения?Не события, но вы можете сделать что-то подобное.http://msdn.microsoft.com/en-us/library/bb383977.aspx

class Program
{
    static void Main(string[] args)
    {
        int a = 10;
        a.MaximumNumberReached();
    }
}

public static class Extns
{
    public static void MaximumNumberReached(this int number)
    {
        if (number == 7)
        {
            //Do something
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...