2016-02-28 4 views
1

Я создаю новый класс, чтобы я мог сделать класс System.Timers.Timer подходящим для моих потребностей чуть лучше. Я создаю свой новый класс, как так ...Замена события System.Timers.Timer.Elapsed при наследовании System.Timers.Timer

using System.Timers; 

class BtElapsedEventArgs : ElapsedEventArgs 
{ 
    //My extras 
} 

namespace MyGreatNewTimer 
{ 
    class BetterTimer : Timer 
    { 

    } 
} 

Теперь я просто хочу, чтобы заменить Elapsed событие, что пожары в другом месте.

private void TestTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    //Timer has elapsed 
} 

Я хочу, чтобы произвести следующее ...

private void TestTimer_Elapsed(object sender, BtElapsedEventArgs e) 
{ 
    //Timer has elapsed 
} 

Как я могу идти об этом?

+0

Follow [Как опубликовать События, которые соответствуют Руководству .NET Framework (C# Руководство по программированию)] (https://msdn.microsoft.com/en-us/library/w369ty8x.aspx) –

+0

@RezaAghaei Я знаю, как создавать события в моем классе и запускать их. Это был не вопрос. Я хочу знать, как переопределить тот, который уже существует в другом классе (или, в моем случае, базовом aka унаследованном классе). Ссылка, которую вы указали, не говорит вам ничего другого, кроме как создать класс с событиями. –

+0

Если я правильно понял ваш вопрос, ответ будет таким же, вам нужно создать собственное событие «Истекшее», которое затеняет исходное событие. –

ответ

2

Если я правильно понимаю ваш вопрос, вы можете следить за How to: Publish Events that Conform to .NET Framework Guidelines (C# Programming Guide) и создать свое собственное Elapsed событие и скрыть оригинальное Epalsed событие:

namespace MyGreatNewTimer 
{ 
    class BtElapsedEventArgs : EventArgs 
    { 
     public DateTime SignalTime { get; set; } 
     //Some other properties 
    } 
    class BetterTimer : Timer 
    { 

     new public event EventHandler<BtElapsedEventArgs> Elapsed; 

     public BetterTimer() 
     { 
      base.Elapsed += BetterTimer_Elapsed; 
     } 

     void BetterTimer_Elapsed(object sender, ElapsedEventArgs e) 
     { 
      var handler = this.Elapsed; 
      if(handler!=null) 
      { 
       var bte = new BtElapsedEventArgs() { SignalTime = e.SignalTime}; 
       //Set other properties, then fire the event 
       handler(sender, bte); 
      } 
     } 
    } 
} 
+0

Это прекрасно и точно, что я искал. Думаю, когда вы создаете класс, наследующий другой, и создаете событие, оно скрывает событие базового класса? В любом случае это привело меня к тому, что мне нужно, спасибо! –

+0

Когда вы определяете член с тем же именем члена в базовом классе, вы скрываете или теневой элемент базового класса. Добро пожаловать :) –

+1

[** новый модификатор (ссылка на C#) **] (https://msdn.microsoft.com/en-us/library/435f1dw2.aspx) При использовании в качестве модификатора декларации новый ключевое слово явно скрывает элемент, унаследованный от базового класса. Когда вы скрываете унаследованный элемент, производная версия члена заменяет версию базового класса. Хотя вы можете скрыть участников без использования нового модификатора, вы получите предупреждение компилятора. Если вы используете новый, чтобы явно скрыть участника, он подавляет это предупреждение. –

Смежные вопросы