六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 334|回复: 0

delphi 函数过程类型 委托...?

[复制链接]

升级  74%

9

主题

9

主题

9

主题

童生

Rank: 1

积分
37
 楼主| 发表于 2012-12-17 21:47:38 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">算是一种减少单元之间的引用的方法
类似委托
<div class="cnblogs_code" >View Code <div id="cnblogs_code_open_8f11664e-2229-4d28-8cb2-c29de8139342" class="cnblogs_code_hide"> 1 unit Unit5; 2 3 interface 4 5 uses System.Classes, System.SysUtils, Vcl.Dialogs; 6 7 type 8   // 声明过程类型 9   TObjFuns = procedure(const str1, str2: string) of object;10 11   IFormattedNumber = interface12     ['{19AE4E57-A022-45B1-AA42-43FF5142D685}']13     function FormattedString: string;14     function GetName: string;15   end;16 17   TFormattedInteger = class(TInterfacedObject, IFormattedNumber)18   private19     FValue: Integer;20   public21     // 声明过程变量22     FPro: TObjFuns;23     constructor Create(AValue: Integer);24     destructor Destroy; override;25     function FormattedString: string;26     function GetName: string;27     procedure DoDelegate(str1, str2: string);28   end;29 30   TFormattedHexInteger = class(TFormattedInteger, IFormattedNumber)31     destructor Destroy; override;32     function FormattedString: string;33     function GetName: string;34   end;35 36 implementation37 38 { TFormattedInteger }39 40 constructor TFormattedInteger.Create(AValue: Integer);41 begin42   inherited Create;43   DoDelegate('TFormattedInteger', 'Destroy');44   FValue := AValue;45 end;46 47 destructor TFormattedInteger.Destroy;48 begin49   DoDelegate('TFormattedInteger', 'Destroy');50   inherited Destroy;51 end;52 53 procedure TFormattedInteger.DoDelegate(str1, str2: string);54 begin55   // 使用过程变量56   if Assigned(FPro) then57     FPro(str1, str2);58 end;59 60 function TFormattedInteger.FormattedString: string;61 begin62   Result := 'This integer is' + IntToStr(FValue);63 end;64 65 function TFormattedInteger.GetName: string;66 begin67   Result := 'TFormattedInteger.GetName';68 end;69 70 { TFormattedHexInteger }71 72 destructor TFormattedHexInteger.Destroy;73 begin74   DoDelegate('TFormattedHexInteger', 'Destroy');75   inherited Destroy;76 end;77 78 function TFormattedHexInteger.FormattedString: string;79 begin80   Result := 'The hex integer is $' + IntToHex(FValue, 4);81 end;82 83 function TFormattedHexInteger.GetName: string;84 begin85   Result := 'TFormattedHexInteger.GetName';86 end;87 88 end.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表