• 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.
  • 相关阅读:
    保利尼奥离中超如肖申克救赎 没人再说人傻钱多
    Apache -- XAMPP Apache 无法启动原因及解决方法
    Android -- 工程目录解释
    正向代理和反向代理
    PHP -- 页面传值的6种获取方法
    实用小工具 -- 在线查看别人网站流量
    web前端 -- onkeydown、onkeypress、onkeyup、onblur、onchange、oninput、onpropertychange的区别
    WampServer -- “You don't have permission to access /phpmyadmin/ on this server.”
    PHP -- 字符串
    PHP -- 类和对象基础入门
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/327088.html
Copyright © 2020-2023  润新知