继承 System.Timers.Timer 时替换 System.Timers.Timer.Elapsed 事件

Arv*_*wen 1 c# overriding timer .net-4.0 winforms

我正在创建一个新类,以便让 System.Timers.Timer 类更适合我的需要。我像这样创建我的新课程......

using System.Timers;

class BtElapsedEventArgs : ElapsedEventArgs
{
    //My extras
}

namespace MyGreatNewTimer
{
    class BetterTimer : Timer
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

现在我只想替换在Elapsed其他地方触发的事件。

private void TestTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
  //Timer has elapsed
}
Run Code Online (Sandbox Code Playgroud)

我希望它产生以下...

private void TestTimer_Elapsed(object sender, BtElapsedEventArgs e)
{
  //Timer has elapsed
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

Rez*_*aei 7

如果我正确理解您的问题,您可以按照How to: Publish Events that Conform to .NET Framework Guidelines(C# 编程指南)创建您自己的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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)