zoukankan      html  css  js  c++  java
  • GetClass与RegisterClass的应用一例

    这是转来的一篇文章,我自己在项目中也使用到了类似于根据类名创建类实例并调用相应函数的功能。具体代码我会在今后发布出来。

    利用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.

    http://www.cnblogs.com/gxch/archive/2011/04/23/GetClass.html

  • 相关阅读:
    hdu 1232 最小生成树
    hdu 1260 dp
    hdu 1385 最短路径按字典数输出
    hdu 1541 树状数组
    hdu 1544 求字符串回文
    hdu 1728
    hdu 1754 树状数组求最大值
    hdu 1892 二维树状数组
    hdu 2082 母函数
    循环
  • 原文地址:https://www.cnblogs.com/findumars/p/6358468.html
Copyright © 2011-2022 走看看