2012-08-29 70 views
1

我有以下接口:通行證方法接口

public interface IModuleTile 
{ 
    void AddEvent(/*Type here*/ methodToAdd); 
    void RemoveEvent(/*Type here*/ methodToRemove); 
} 

而且我想這樣做:

public partial class TestControl : UserControl, IModuleTile 
{ 
    public TestControl() 
    { 
     InitializeComponent(); 
    } 

    public void AddEvent(/*Type here*/ eventToAdd) 
    { 
     ShowModule.Click += methodToAdd; 
    } 

    public void RemoveEvent(/*Type here*/ methodToRemove); 
    { 
     ShowModule.Click += methodToRemove; 
    } 
} 

我有什麼要設置的接口類型來傳遞的方法呢?

+0

你知道你其實可以在接口聲明的事件,對吧? – smartcaveman

+0

[傳遞某種代理..](http://msdn.microsoft.com/en-us/library/ms173171.aspx) –

回答

2

如果這總是和Click事件一樣在按鈕上:使用EventHandler

public void AddEvent(EventHandler eventToAdd) 
{ 
    ShowModule.Click += methodToAdd; 
} 

當你有多個不同簽名的事件時,它會變得更加複雜。

2

我會在這裏做的只是將一個事件直接放入界面,而不是明確添加添加/刪除方法。

public interface IModuleTile 
{ 
    //change `EventHandler` to match whatever the event handler type 
    //is for the event that you're "wrapping", if needed 
    event EventHandler MyClick; 
} 

然後實現可以是這樣的:

public partial class TestControl : UserControl, IModuleTile 
{ 
    //You'll need to change `EventHandler` here too, if you changed it above 
    public event EventHandler MyClick 
    { 
     add 
     { 
      ShowModule.Click += value; 
     } 
     remove 
     { 
      ShowModule.Click -= value; 
     } 
    } 
}