如果不用继承,那就这样吧type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } published { Public declarations } procedure func1(); end; TC1=class published procedure func1(); end; TC2=class published procedure func1(); end;var Form1: TForm1;implementation{$R *.dfm}uses Types, TypInfo;type TCallFunc=procedure() of object;var c1:TC1; c2:TC2; c:TObject;procedure DynamicCall(obj:TObject;procName:string);var proc:TMethod;begin proc.Data:=obj; proc.Code:=obj.MethodAddress('func1'); if proc.Code=nil then Exit; TCallFunc(proc)();end;procedure TForm1.FormCreate(Sender: TObject);var proc:TMethod;begin c1:=tc1.Create; c2:=tc2.Create; DynamicCall(c1,'func1'); DynamicCall(c2,'func1'); DynamicCall(self,'func1');end;{ TC1 }procedure TC1.func1;begin ShowMessage('tc1.func1');end;{ TC2 }procedure TC2.func1;begin ShowMessage('tc2.func1');end;procedure TForm1.func1;begin ShowMessage('tform1.func1');end;end.注意,根据你的实际情况把TCallFunc进行调整,,要动态调用的方法必须声明为published.否则无效.