c#的事件实现的原理

如果你看了本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();
                 } 
         }
}

运行的结果截图:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值