2012-08-29 31 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; 
     } 
    } 
}