带有虚拟事件的警告消息

时间:2012-01-31 13:09:14

标签: c#

我想使用虚拟事件&在派生类中覆盖它。以下是代码片段,我在声明虚拟事件时收到警告消息。

                using System;
                using System.Collections.Generic;
                using System.Linq;
                using System.Text;

                namespace ConsoleApplication6
                {
                    class Program
                    {
                        static void Main(string[] args)
                        {
                            DeriveClass obj = new DeriveClass();
                            obj.myEvent += new EventHandler(obj_myEvent);
                            obj.MyFunction();

                            Console.ReadLine();
                        }

                        static void obj_myEvent(object sender, EventArgs e)
                        {
                            Console.WriteLine("Event fired.....");
                        }
                    }

                    public abstract class BaseClass
                    {
                        // I get warning on this line - Warning 1   The event 'ConsoleApplication6.BaseClass.myEvent' is never used Program.cs
                        public virtual event EventHandler myEvent;
                    }

                    public class DeriveClass : BaseClass
                    {
                        public override event EventHandler myEvent;

                        public void MyFunction()
                        {
                            if (myEvent != null)
                            {
                                myEvent(this, null);
                            }
                        }
                    }
                }

有人可以告诉我如何解决此警告吗?

Atul Sureka

3 个答案:

答案 0 :(得分:3)

在这种情况下使用的一个更为人熟知的模式是提供DeriveClass一个受保护的方法来引发myEvent。例如:

public abstract class BaseClass {

    public event EventHandler MyEvent;

    protected virtual void OnMyEvent(EventArgs e) {
        var local = MyEvent;
        if (local != null) local(this, e);
    }
}

public class DeriveClass : BaseClass {

    public void MyFunction() {

        OnMyEvent(null);
    }
}

此模式将删除警告。存在该警告是因为myEvent中从不使用BaseClass

答案 1 :(得分:0)

使事件非虚拟化并实现派生类可用于引发它的受保护方法。没有任何理由可以举办虚拟活动。

public event EventHandler MyEvent;

protected void RaiseMyEvent()
{
    var myEvent = MyEvent;
    if (myEvent != null)
       MyEvent(EventArgs.Empty);
}

答案 2 :(得分:0)

因为我不想在基类中对该事件做任何事情。以下解决了警​​告。

  public virtual event EventHandler myEvent = delegate { };