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.
  • 相关阅读:
    part11-1 Python图形界面编程(Python GUI库介绍、Tkinter 组件介绍、布局管理器、事件处理)
    part10-3 Python常见模块(正则表达式)
    Cyclic Nacklace HDU
    模拟题 Right turn SCU
    状态DP Doing Homework HDU
    Dp Milking Time POJ
    区间DP Treats for the Cows POJ
    DP Help Jimmy POJ
    Dales and Hills Gym
    Kids and Prizes Gym
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/327088.html
Copyright © 2011-2022 走看看