回 帖 发 新 帖 刷新版面

主题:事件与委托的问题???

本人正刚开始学习C#
现在学习到委托和事件了,小弟有些不明白了请个位高手指点:


我觉得事件就是委托
只不过是有2个参数(object 和 eventargs)和void返回类型和 关键字event的 特殊的委托

例如下面这两个程序,一个是用委托做的,一个是用事件做的。他们完成同一个功能。而且代码几乎相同
我就不懂了 , 既然能使用委托来完成,干吗还要用事件来完成,他们有什么区别,是什么关系呢??????????



///////////////////////////////////////委托//////////////////////////////////////////////
using System;

namespace  a
{
class UserInputMonitor
{
  public delegate void UserRequest();
  public  UserInputMonitor.UserRequest  OnUserRequest;
  public void Run()
  {    do  
   {   
    if (Console.ReadLine()=="h")  
    {    
     OnUserRequest();  
    }    
   }while(true);
   }
}
public class Client
{
     public static void Main()
       {  
      UserInputMonitor monitor=new UserInputMonitor();
      new Client(monitor);
      monitor.Run();
       }
private static void ShowMessage()
  {
   Console.WriteLine("委托"+"   "+"HaHa!!");
  }
Client(UserInputMonitor m)   {
     m.OnUserRequest = new UserInputMonitor.UserRequest(Client.ShowMessage);
     }
}
}
//////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////事件///////////////////////////////////////////////////

using System;

namespace 事件
{
using System;
class UserInputMonitor
{
  public delegate void UserRequest(object sender,EventArgs e); //定义委托
  public event UserRequest OnUserRequest; //此委托类型类型的事件
  public void Run()
  {
       
   do
   {  
    if (Console.ReadLine()=="h")
    {   

     Console.WriteLine("this is envent");
     OnUserRequest(this,new EventArgs());
    }   
   }while(true);
  }
}
    
public class Client
{
       
  public static void Main()
       
  {
    UserInputMonitor monitor=new UserInputMonitor();
       
   new Client(monitor);  
       
   monitor.Run();
       
  }
       
  private void ShowMessage(object sender,EventArgs e)
  {
       
   Console.WriteLine("事件"+"  "+"HaHa!!");
      
  }
Client(UserInputMonitor m)
    {
       m.OnUserRequest+=new UserInputMonitor.UserRequest(this.ShowMessage);  
     }
}

回复列表 (共11个回复)

11 楼


我想事件是为了封装用。是出于代码安全的考虑。可以这样理解吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册