如何用一个函数替换类中的另一个函数?
比如:一个类有函数PROC1,现在我写了个函数PROC2.如何用这个PROC2替换这个PROC1?

解决方案 »

  1.   

    重载。声明相同的名称,并且PROC2是从PROC1继承鸸而来。
      

  2.   

    对,参数要有区别
    proc(s:string);overload;
    proc(i:integer);overload;
      

  3.   

    方法重载
    一个类中有许多同名的方法带着不同的参数表,
    能重载的方法必须用overload指示符标识出来
      

  4.   

    >>比如:一个类有函数PROC1,现在我写了个函数PROC2.如何用这个PROC2替换这个PROC1?
    修改 Proc1 實現, 在Proc1中直接調用 Proc2, 這樣, 對外部的舊用戶, 就沒有什麼影響!!
    新用戶可使用Proc2
      

  5.   

    可能我说的不是很清楚.
    我的意思是现在有一个类的实例,我不想使用里面的某个函数,想用自己的函数在实例创建的时候,把那个函数替换掉.对于OVERLOAD只能在类的内部使用,我不想修改这个类的定义,只是想修改一下这个类函数的调用指针.请问如何实现?
      

  6.   

    新写一个类,继承你原来的类,然后override你要改的方法;不调用INHREI。。ED;调用你自己的方法;
      

  7.   

    TForm = class
    protected
      function WndProc(HndWnd: HWND; AMsg, WParam, LParam: LongInt): LongInt; stdcall;
    end;
      

  8.   

    TForm1 = class(TForm)
    ...
    protected
      function WndProc(HndWnd: HWND; AMsg, WParam, LParam: LongInt): LongInt; stdcall;
    end;
      

  9.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      TTest=class(TObject)
      private
      protected
        procedure test1(s:string);dynamic;//比如这个方法是你的类要代替的方法
      public
      end;
      TmyTest=class(TTest)//新构造一个类;从你的类继承;
      private
      protected
        procedure test1(s:string);override;//OVERRIDE你要修改的方法;
        procedure yourmethod(s:string);
      public
      end;
    var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TmyTest.yourmethod(s:string);
    begin
      showmessage(s+s);//你自己的方法;
    end;
    procedure TmyTest.test1(s:string);
    begin
      yourmethod(s);
    end;
    procedure TTest.test1(s:string);
    begin
      showmessage(s);
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      tmp:TmyTest;
    begin
      tmp:=TmyTest.Create ;//进行测试;
      tmp.test1('a');
      tmp.Free;
    end;end.