Этот вопрос, вероятно, задавался много, главное в моем вопросе (и, следовательно, отчасти из-за того, что я его публикую) состоит в том, что я не знаю, как вообще называется этот формат / синтаксис, и поэтомупонятия не имею, что искать.Для справки я приложил пример данного типа кода.В этом примере Timer использует синтаксис / функциональность, которую я не полностью понимаю, но я видел этот тип синтаксиса, используемый в других контекстах.Моя цель - я хотел бы экстраполировать / понять / использовать эту функциональность в общем контексте (необязательно используя таймер).Я понимаю, как код работает функционально, каждые 2 секунды (приблизительно) таймер активирует «OnTimedEvent», и этот метод выводит информацию о событии (как показано в нижней части этого поста).Из того, что я понимаю, мой таймер («aTimer») является объектом, и в нем есть такие переменные, как «autoreset» и «Enabled», которые являются значениями bools, устанавливаемыми в коде как «true».
Это сложно сформулировать, но я не понимаю синтаксис / как это работает.Например, я вижу «aTimer.Elapsed + = OnTimedEvent» и вижу, что результат «OnTimedEvent» вызывается, когда происходит событие «Elapsed».Проблема в том, что я не понимаю его бэк-энда, поэтому не знаю, как применить это к другому коду, с которым я работаю.
- Что делает "+ ="?Это прикрепление метода, который будет вызываться всякий раз, когда происходит событие?Это порождается в том же потоке, что и событие, и можно ли вызывать несколько методов таким образом (например, делать Elapsed + = ArbitrarySecondMethod), или это переопределяет некоторый ответ / метод, который по умолчанию связан с «Elapsed»?Что будет даже ответом по умолчанию?
- В «OnTimedEvent» как «источник» и прошедшие события фактически передаются ему?
- Я не вижу, как e.SignalTime даже проходит стадию компиляции.Как бы «OnTimedEvent» даже узнал, что объект Timer существует?
- Кроме того, с параметрами, передаваемыми в «OnTimedEvent», является то, что (Object x, Args y) стандартный формат, используемый в такой ситуации, что я хотел бы узнать, чтобы узнать больше о том, как использовать эти типыдополнительных методов (в общем контексте)
Код / синтаксис в вопросе:
(Извините, чтоформат нечетный, но я хотел убедиться, что я выделил конкретные части, которые я хочу понять)
{
aTimer.Elapsed + = OnTimedEvent;
}
частная статическая пустота OnTimedEvent (Источник объекта, ElapsedEventArgs e)
{
Console.WriteLine ("Событие Elapsedбыло поднято в {0: ЧЧ: мм: сс.ффф} ", e.SignalTime );
}
Полная программа для справки:
class Program
{
private static System.Timers.Timer aTimer;
public static void Main()
{
SetTimer();
Console.WriteLine("\nPress the Enter key to exit the application...\n");
Console.WriteLine("The application started at {0:HH:mm:ss.fff}", DateTime.Now);
Console.ReadLine();
aTimer.Stop();
aTimer.Dispose();
Console.WriteLine("Terminating the application...");
}
private static void SetTimer()
{
// Create a timer with a two second interval.
aTimer = new System.Timers.Timer(2000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
e.SignalTime);
}
}
Код отображает вывод следующим образом:
// Press the Enter key to exit the application...
//
// The application started at 09:40:29.068
// The Elapsed event was raised at 09:40:31.084
// The Elapsed event was raised at 09:40:33.100
// The Elapsed event was raised at 09:40:35.100
// The Elapsed event was raised at 09:40:37.116
// The Elapsed event was raised at 09:40:39.116
// The Elapsed event was raised at 09:40:41.117
// ....(you get the point)
// Terminating the application...