<script type="text/javascript">google_ad_client = "pub-2048279401139630";google_ad_slot = "8856771542";google_ad_width = 728;google_ad_height = 90;document.write("<s"+"cript type='text/javascript' s"+"rc='http://pagead2.googlesyndication.com/pagead/show_ads"+"."+"js'></scr"+"ipt>");</script>
如果你看了本BLOG写的委托的文章,理解本文应该比较容易,C#中的事件的实现是通过委托直接实现的,所以本文只给出事件实现的代码示例,如果你明白了委托,相信看懂本代码应该不难。
using System;
namespace Events
{
delegate void SomeDelegate(string sender);
interface ISomeInterface
{
event SomeDelegate SomeEvent;
void PerformSomeEvent();
void SomeEventHandler(string sender);
}
abstract class AbstractClass:ISomeInterface
{
public virtual event SomeDelegate SomeEvent;
public abstract void SomeEventHandler(string sender);
public abstract void PerformSomeEvent();
protected void PerformSomeEventInternal(string sender)
{
if(null!=SomeEvent)
{
SomeEvent(sender);
}
}
protected void SomeEventHandlerInternal(string sender,string receiver)
{
Console.WriteLine("some event has been handler");
Console.WriteLine(" Sender is ["+ sender+"]");
Console.WriteLine("Receiver is ["+receiver+"]");
Console.WriteLine("------------------------------------");
}
}
class SomeClass:AbstractClass,ISomeInterface
{
public override void PerformSomeEvent()
{
PerformSomeEventInternal("Some Class");
}
public override void SomeEventHandler(string sender)
{
SomeEventHandlerInternal(sender,"Some Class");
}
}
class AnotherClass:AbstractClass,ISomeInterface
{
public override void PerformSomeEvent()
{
PerformSomeEventInternal("Another Class");
}
public override void SomeEventHandler(string sender)
{
SomeEventHandlerInternal(sender,"Another Class");
}
}
class SomeApplication
{
public static void SomeEventStaticHander(string sender)
{
Console.WriteLine("some event has been handler.");
Console.WriteLine(" Sender is ["+ sender+"]");
Console.WriteLine("Receiver is [some application]");
Console.WriteLine("-------------------------------------");
}
static void Main(string [] args)
{
SomeClass someclass=new SomeClass();
AnotherClass anotherclass=new AnotherClass();
someclass.SomeEvent+=new SomeDelegate(someclass.SomeEventHandler);
someclass.SomeEvent+=new SomeDelegate(anotherclass.SomeEventHandler);
someclass.SomeEvent+=new SomeDelegate(SomeApplication.SomeEventStaticHander);
someclass.PerformSomeEvent();
Console.ReadLine();
}
}
}
namespace Events
{
delegate void SomeDelegate(string sender);
interface ISomeInterface
{
event SomeDelegate SomeEvent;
void PerformSomeEvent();
void SomeEventHandler(string sender);
}
abstract class AbstractClass:ISomeInterface
{
public virtual event SomeDelegate SomeEvent;
public abstract void SomeEventHandler(string sender);
public abstract void PerformSomeEvent();
protected void PerformSomeEventInternal(string sender)
{
if(null!=SomeEvent)
{
SomeEvent(sender);
}
}
protected void SomeEventHandlerInternal(string sender,string receiver)
{
Console.WriteLine("some event has been handler");
Console.WriteLine(" Sender is ["+ sender+"]");
Console.WriteLine("Receiver is ["+receiver+"]");
Console.WriteLine("------------------------------------");
}
}
class SomeClass:AbstractClass,ISomeInterface
{
public override void PerformSomeEvent()
{
PerformSomeEventInternal("Some Class");
}
public override void SomeEventHandler(string sender)
{
SomeEventHandlerInternal(sender,"Some Class");
}
}
class AnotherClass:AbstractClass,ISomeInterface
{
public override void PerformSomeEvent()
{
PerformSomeEventInternal("Another Class");
}
public override void SomeEventHandler(string sender)
{
SomeEventHandlerInternal(sender,"Another Class");
}
}
class SomeApplication
{
public static void SomeEventStaticHander(string sender)
{
Console.WriteLine("some event has been handler.");
Console.WriteLine(" Sender is ["+ sender+"]");
Console.WriteLine("Receiver is [some application]");
Console.WriteLine("-------------------------------------");
}
static void Main(string [] args)
{
SomeClass someclass=new SomeClass();
AnotherClass anotherclass=new AnotherClass();
someclass.SomeEvent+=new SomeDelegate(someclass.SomeEventHandler);
someclass.SomeEvent+=new SomeDelegate(anotherclass.SomeEventHandler);
someclass.SomeEvent+=new SomeDelegate(SomeApplication.SomeEventStaticHander);
someclass.PerformSomeEvent();
Console.ReadLine();
}
}
}
运行的结果截图: