打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
对于“委托”的解释摘录(五)
 一个函数带有参数非常平常,但一个类带有一个方法的参数可能会觉得奇怪,这就是委托的特征。很多书籍都说委托就象C 或C++的函数指针,说得不无道理,因为它允许在委托对象的内部封装方法的引用,也就是前面所说的带有一个方法的参数,这个方法参数有一定的规则,它可以 是静态的,也可以是一个实例方法,这个方法的参数和返回类型必须和委托对象所带的相同。

         委托就像一个中间代理,通过引用这个委托对象,就可以调用被这个委托对象所引用的方法,也就是它所带的方法参数。可以调用它引用的方法,而不用管这个方法 的哪个类的,因为已经通过这个委托对象去引用这个类的方法了,即我们调用这个方法是通过这个委托中间代理来实现的。有一点好处就是委托它是面向对象的,而 且类型安全的。看以下代码:

class invokedclass
{
 public string invokedmethod()  //注意此方法返回int,与委托对象相同
 {
  Console.WriteLine("Hello"); 
 }
}
invokedclass classobj = new invokeclass();
delegate string MyDelegate();  //声明一个返回类型为int的委托对象
MyDelegate deleobj=new MyDelegate(classobj.invokedmethod);//创建一个带有方法的委托对象

        委托通常与事件一起结合使用。事件是对用户动作的处理,当用户有某种动作的时候,通过委托对象来执行,因此,事件是通过委托来声明的。事件可以使用任何类 型的委托,但有一点要注意,就是在使用组件时要遵循一些规则:事件使用的委托类型应有两个参数,一个是对象源,一个是e参数。对象源表示事件发生的源 ; e表示封装该事件的一些信息,这个e是从EventArgs类派生出来的。事件处理程序其实就同系统已定义的按钮点击事件,只不过这一次是由我们自己来定 义而已。关于委托与事件的例子如下:

//********************************************/

/*       Delegate Sample
/* 
//*****************************************************************
*/


using System;

namespace
 EventTest
{
 //事件类

 public class EventClass
 
{
  public void display(object
 sender,System.EventArgs e)
  
{
   Console.WriteLine("This is the Event Class"
);
   Console.ReadLine();
  }

 }

 
//调用类
 class InvokeClass
 
{
  //声明代理对象,注意参数

   public delegate void delegateobj(object sender,System.EventArgs e);
  //声明事件对象 

  private event delegateobj obj;
  //声明要调用的事件类对象

  private EventClass ec;
  
  public
 InvokeClass()
  
{
   ec=new
 EventClass();
   //添加事件对象到事件队列中,参数为要调用的事件

   this.obj+=new delegateobj(ec.display);
  }

  
//调用delegate对象触发事件
  protected void OnObj(System.EventArgs e)
  
{
   if(this.obj!=null
)
   
{
     obj(this
,e);
   }

  }

  
public void RaiseEvent()
  
{
   EventArgs e=new
 EventArgs();
   OnObj(e);
  }

  
static void Main(string[] args)
  
{
   InvokeClass ic=new
 InvokeClass();
   Console.WriteLine("Please input a string"
);
   string input=
Console.ReadLine();
   if(input.Equals(""
))
   
{
    Console.WriteLine("Sorry,you don't input anything"
);
   }

   
else
   
{
    //触发事件

    ic.RaiseEvent();
   }

  }

 }

}



 

   
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
.net的事件与委托(转载)
C# 多线程入门系列(三)
C#委托和事件详解(12)
通俗的事件委托解释
详解C#委托、时间和Lambda表达式 - 51CTO.COM
C#:代表(delegate)和事件(event) (转)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服