c#的事件实现的原理

来源:互联网 发布:淘宝直播怎么私信主播 编辑:程序博客网 时间:2024/05/27 16:43
<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();
                 } 
         }
}

运行的结果截图:

 

 
原创粉丝点击