zoukankan      html  css  js  c++  java
  • C#的委托与Delphi中的"事件委托"

    C# in .Net Framework
            .Net Framework中,要传递方法,必须把方法细节包装在一种新类型的对象中,即委托.委托只是一种特殊的对象类型,其特殊之外在于,我们以前定义的所有对象都是包含数据,而委托包含的只是方法的细节.
            委托是一个类,所以其使用同类一样,需要两阶段.声明(定义)委托,创建委托一个或多个实例.
            声明委托语法

            delegate void Operation(unit x);

    (定义的这个委托代表方法没有返回值,且有一个unit参数.
            delphi中  

    TNotifyEvent = procedure(Sender: TObject) of object;

       在delphi下实现回调的例子

     1 {
     2 使用委托,将方法做为别一个方法的参数传递的例子(回调)
     3 }
     4 unit Unit1;
     5 
     6 interface
     7 
     8 uses
     9   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    10   Dialogs, StdCtrls;
    11 
    12 type
    13   TDelegateClass=procedure(msg:string) of object;//定义一个委托
    14   TDelegateClassArray=array[0..1] of TDelegateClass;
    15   TForm1 = class(TForm)
    16     Button1: TButton;
    17     Button2: TButton;
    18     procedure Button1Click(Sender: TObject);
    19     procedure Button2Click(Sender: TObject);
    20   private
    21     { Private declarations }
    22     procedure UserMethod(msg:string);//委托指定的用户自定义方法
    23     procedure UserMethod2(msg:string);//委托指定的用户自定义方法2    
    24     procedure doDelegate(Delegate:TDelegateClass;msg:string);//如果委托实例存在,就执行委托
    25   public
    26     { Public declarations }
    27   end;
    28 
    29 var
    30   Form1: TForm1;
    31 
    32 implementation
    33 
    34 {$R *.dfm}
    35 
    36 { TForm1 }
    37 
    38 procedure TForm1.doDelegate(Delegate:TDelegateClass;msg:string);
    39 begin
    40   if Assigned(Delegate) then
    41   Delegate(msg);
    42 end;
    43 
    44 procedure TForm1.Button1Click(Sender: TObject);
    45 begin
    46   doDelegate(UserMethod,'test');//调用委托处理程序,显示test信息
    47 end;
    48 
    49 procedure TForm1.UserMethod(msg: string);
    50 begin
    51   showmessage(msg);
    52 end;
    53 
    54 procedure TForm1.Button2Click(Sender: TObject);
    55 var
    56   test:TDelegateClassArray;
    57 begin
    58   test[0]:=UserMethod;
    59   test[1]:=UserMethod2;
    60   doDelegate(test[0],'test');
    61   doDelegate(test[1],'test');
    62 end;
    63 
    64 procedure TForm1.UserMethod2(msg: string);
    65 begin
    66   showmessage('这是第二个方法');
    67 end;
    68 
    69 end.
  • 相关阅读:
    如何使用SAP Intelligent Robotic Process Automation自动操作Excel
    OpenSAML 使用引导 IV: 安全特性
    Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
    微服务架构集大成者—Spring Cloud (转载)
    Spring Cloud Eureka 服务注册列表显示 IP 配置问题
    使用 Notification API 开启浏览器桌面提醒
    SignalR 中使用 MessagePack 序列化提高 WebSocket 通信性能
    配置 Nginx 的目录浏览功能
    关于 Nginx 配置 WebSocket 400 问题
    Migrate from ASP.NET Core 2.0 to 2.1
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/327088.html
Copyright © 2011-2022 走看看