using System;
namespace wrapTwoInterfaceEvents
{
public interface IFirstEvent
{
event EventHandler Handle;
}
public interface ISecondEvent
{
event EventHandler Handle;
}
public class C : IFirstEvent, ISecondEvent
{
public event EventHandler FirstHandle;
public event EventHandler SecondHandle;
object lockObject = new Object();
event EventHandler IFirstEvent.Handle
{
add
{
lock(lockObject)
{
FirstHandle += value;
}
}
remove
{
lock(lockObject)
{
FirstHandle -= value;
}
}
}
event EventHandler ISecondEvent.Handle
{
add
{
lock(lockObject)
{
SecondHandle += value;
}
}
remove
{
lock(lockObject)
{
SecondHandle -= value;
}
}
}
public void EventHappen()
{
EventHandler handler = FirstHandle;
if(handler != null)
{
handler(this, new EventArgs());
}
Console.WriteLine("Event Happening");
handler = SecondHandle;
if(handler != null)
{
handler(this, new EventArgs());
}
}
}
public class Subscribe1
{
public Subscribe1(C c)
{
IFirstEvent iFirst = (IFirstEvent)c;
iFirst.Handle += EventHandleWay1;
}
void EventHandleWay1(object sender, EventArgs args)
{
Console.WriteLine("First handle way execute");
}
public void UnSubscribe(C c)
{
IFirstEvent iFirst = (IFirstEvent)c;
iFirst.Handle -= EventHandleWay1;
}
}
public class Subscribe2
{
public Subscribe2(C c)
{
ISecondEvent iSecond = (ISecondEvent)c;
iSecond.Handle += EventHandleWay2;
}
void EventHandleWay2(object sender, EventArgs args)
{
Console.WriteLine("Second handle way execute");
}
public void UnSubscribe(C c)
{
ISecondEvent iSecond = (ISecondEvent)c;
iSecond.Handle -= EventHandleWay2;
}
}
}
实现代码:
using wrapTwoInterfaceEvents;
class Client
{
static void Main()
{
C c = new C();
//Subscribe1 sb1 =new Subscribe1(c);
Subscribe2 sb2 =new Subscribe2(c);
sb2.UnSubscribe(c);
c.EventHappen();
return;
}
}