GetClass与RegisterClass的应用一例

利用GetClass与RegisterClass可以实现根据字符串来实例化具体的子类,这对于某些需要动态配置程序的场合是很有用的。其他的应用如子窗体切换,算法替换等都能得到应用。

[Delphi] <wbr>GetClass与RegisterClass的应用一例unit Example1;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例interface
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例uses
[Delphi] <wbr>GetClass与RegisterClass的应用一例  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
[Delphi] <wbr>GetClass与RegisterClass的应用一例  Dialogs, StdCtrls;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
type

[Delphi] <wbr>GetClass与RegisterClass的应用一例  TForm1 
= class(TForm)
[Delphi] <wbr>GetClass与RegisterClass的应用一例    Button1: TButton;
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 Button1Click(Sender: TObject);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  private
[Delphi] <wbr>GetClass与RegisterClass的应用一例  public
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例  ILog 
=
 interface(IUnknown)
[Delphi] <wbr>GetClass与RegisterClass的应用一例    [
'{A65044FC-644C-482A-BBFF-50A618835FC6}'
]
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 WriteMessage;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例  TLog 
=
 class(TInterfacedPersistent, ILog)
[Delphi] <wbr>GetClass与RegisterClass的应用一例  public
[Delphi] <wbr>GetClass与RegisterClass的应用一例    class 
function
 CreateInstance(Name: string): TLog; overload;
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 WriteMessage; virtual; abstract;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例  TTextLog 
=
 class(TLog)
[Delphi] <wbr>GetClass与RegisterClass的应用一例  public
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 WriteMessage; override;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例  TXMLLog 
=
 class(TLog)
[Delphi] <wbr>GetClass与RegisterClass的应用一例  public
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 WriteMessage; override;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例  TNullLog 
=
 class(TLog)
[Delphi] <wbr>GetClass与RegisterClass的应用一例  public
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 WriteMessage; override;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
var

[Delphi] <wbr>GetClass与RegisterClass的应用一例  Form1: TForm1;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例implementation
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
{$R *.dfm}
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
procedure TForm1.Button1Click(Sender: TObject);
[Delphi] <wbr>GetClass与RegisterClass的应用一例
var

[Delphi] <wbr>GetClass与RegisterClass的应用一例  Log: TLog;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
begin
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
{ 实际应用中可以从配置中读取字符串来决定实例化具体的子类 }
[Delphi] <wbr>GetClass与RegisterClass的应用一例  Log :
= TLog.CreateInstance('TXMLLog');
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
if Assigned(Log) then

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
begin
[Delphi] <wbr>GetClass与RegisterClass的应用一例    Log.WriteMessage;
[Delphi] <wbr>GetClass与RegisterClass的应用一例    Log.Free;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例class function
 TLog.CreateInstance(Name: string): TLog;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
var

[Delphi] <wbr>GetClass与RegisterClass的应用一例  AClass: TPersistentClass;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
begin
[Delphi] <wbr>GetClass与RegisterClass的应用一例  Result :
= nil;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  AClass :
=
 GetClass(Name);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
if Assigned(AClass) then

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
begin
[Delphi] <wbr>GetClass与RegisterClass的应用一例    Result :
= AClass.NewInstance as TLog;
[Delphi] <wbr>GetClass与RegisterClass的应用一例    Result.Create;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
else
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
{ error handle }
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
{ TTextLog }

[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
procedure TTextLog.WriteMessage;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
begin

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
//写入到文本文件
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
{ TXMLLog }

[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
procedure TXMLLog.WriteMessage;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
begin

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
//写入到XML文件
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
{ TNullLog }

[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
procedure TNullLog.WriteMessage;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
begin

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
{ nothing need to do }
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例initialization
[Delphi] <wbr>GetClass与RegisterClass的应用一例  RegisterClass(TTextLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  RegisterClass(TXMLLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  RegisterClass(TNullLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例finalization
[Delphi] <wbr>GetClass与RegisterClass的应用一例  UnRegisterClass(TTextLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  UnRegisterClass(TXMLLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  UnRegisterClass(TNullLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end
原文地址:https://www.cnblogs.com/key-ok/p/3380412.html