2011-07-18 39 views
1

我有抽象類是否可以在抽象類中創建事件?

public abstract class BaseClass 
{ 
    public delegate void ContextMenuClickHandler(object sender, Point point); 
    public event ContextMenuClickHandler OnContextMenuClick; 

    public void OnMouseClick(MouseEventArgs e) 
    { 
     OnContextMenuClick(this, new Point((int) x, (int) y)); 
    } 
} 

,我插事件:

Base.ContextMenuClickHandler += ShowContextMenu;//error 

void ShowContextMenu(object sender, Point point) 
{ 

} 

錯誤:

'Base.ContextMenuClickHandler' is a 'type', which is not valid in the given context

如何解決呢?

回答

1
OnContextMenuClick += ShowContextMenu;//fix 

你使用了錯誤的變量。 OnContextMenuClick是您訂閱的活動。

但在你的情況下,爲什麼不使用虛擬方法?

+0

好,並需要添加靜態公共靜態事件ContextMenuClickHandler OnContextMenuClick; – Mediator

+1

你不應該在非靜態類中創建一個公共靜態屬性。首先,它不是單元測試的,其次你在一個上下文中混合了2個不同的生命週期,這可能導致難以發現的錯誤......如果你需要在任何地方都可用,請嘗試命令模式。 – cRichter

2

這裏的問題是您使用事件類型ContextMenuClickHandler而不是事件名稱OnContextMenuClick。請嘗試以下

base.OnContextMenuClick += ShowContextMenu 
0

這裏有一個例子,看看: