程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Delphi中獲取某類的祖先類及其所在單元名稱

Delphi中獲取某類的祖先類及其所在單元名稱

編輯:.NET實例教程
前幾天在CSDN社區看到一篇《如何得到自身單元名稱》的帖子,其中一位名為sdzeng網友給出了答案。受此啟發,自己寫了一個函數,用來獲取指定類的所有祖先類的名稱及其所在的單元名稱。

//參數說明:
//AClass: 需要獲取祖先類的類
//ASerIEs: 是一個字符串列表,用來存放返回的祖先類及其所在單元的名稱
procedure GetInheritanceSeries(AClass: TClass; out ASerIEs: TStringList);
var
  PTD: PTypeData;
  PTI: PTypeInfo;
  PClass: TClass;
begin
  ASerIEs.Clear;
  PClass := TButton;
      if not PClass.InheritsFrom(TPersistent) then Exit;
  PTD := GetTypeData(PClass.ClassInfo);
  ASerIEs.Add(Format(''%s(%s)'', [PClass.ClassName, PTD.UnitName]));
  repeat
    PTD := GetTypeData(PClass.ClassInfo);
    PTI := PTD.ParentInfo^;
    ASerIEs.Insert(0, Format(''%s(%s)'', [PTI^.Name, PTD.UnitName]));
    PClass := PClass.ClassParent;
  until not PClass.InheritsFrom(TPersistent);
end;

使用舉例



//獲取TButton類的所有祖先類及其所在單元名稱
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    GetInheritanceSerIEs(TButton, sl);
    Memo1.Lines.AddStrings(sl);
  finally
    sl.Free;
  end;
end;

返回結果如下:

TObject(Classes)
TPersistent(Classes)
TComponent(Controls)
TControl(Controls)
TWinControl(StdCtrls)
TButtonControl(StdCtrls)
TButton(StdCtrls)

補充說明

    注意上術代碼中GetTypeData(PClass.ClassInfo);的使用,必須保證該類是從TPersistent類的派生類才可以這麼使用,否則會拋出地址訪問錯誤的。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved