【发布时间】:2010-01-22 11:25:36
【问题描述】:
我在我的应用程序中冒泡事件,因此使用冒泡事件方法。由于此方法处理各种冒泡事件,因此它们是一个 switch 或 if 语句,以确定我们正在处理的事件类型。我想知道是否可以通过创建不同版本的事件 args 类来解决这个问题。所以让我解释一下,假设我有两种不同处理的事件类型,称为 X 和 Y,我为这两种事件创建新的事件参数类,因为它们存储不同类型的信息。
public class EventsArgsX : EventsArgs
public class EventsArgsY : EventsArgs
然后,当我从应用程序中的某个地方 RaiseBubbleEvent 时,我可以传递两种基于事件 arg 的类型中的任何一种,所以..
EventArgsX foox = new EventArgsX();
RaiseBubbleEvent(null,foox);
或
EventArgsY fooy = new EventArgsY();
RaiseBubbleEvent(null,fooy);
然后 OnBubbleEvent 方法选择了这个,谁的签名是 覆盖 OnBubbleEvent(object source, EventArgs e)
现在我不能重载这个方法,因为它首先被覆盖,所以我认为我可以做的是用另一个方法来处理这个,所以
protected override OnBubbleEvent(object source, EventArgs e)
{
DoStuff(e);
}
private void DoStuff(EventArgsY args)
{}
private void DoStuff(EventArgsX args)
{}
但问题当然是 OnBubbleEvent 方法中的 EventArgs e 在调用时属于 EventArgs 类型。然而我们知道它不是。那么,为了使方法调用起作用,我将如何将其恢复为实际类型?
非常感谢,希望您能帮我解决这个问题,这似乎很容易,就像可能遗漏了什么或者无法完成一样
有什么想法吗??
【问题讨论】:
-
我想我还不明白。为什么不能写两个 OnBubbleEvent 方法?你可以覆盖一个被覆盖的方法?!
标签: c# inheritance casting overloading