请问在父类的代码中如何阻止子类中代码的执行?
例如:
TForm1.OnClick(Sender:TObject);
begin
  if XXXXXXX then
     .......            // 防止执行子类中的代码
end;

解决方案 »

  1.   

    呵呵,DFW的朋友已经给了你很明确的答复了你要实现的功能在Delphi中根本不可能存在!
      

  2.   

    Raise Exception.Create('错误');
    抛出异常应该可以解决你的问题。
      

  3.   

    >>请问在父类的代码中如何阻止子类中代码的执行?
    就我所知的知識, 無法絕對阻止;
    因為子類可以重載, 或覆蓋 掉父类 的function ,procedure!!
    C++ 或 java 應該可以!!!
      

  4.   

    parent根本就不知道到底有没有child继承,如何阻止呀
      

  5.   

    sorry,也许我错了
    class a
      ca:a;
      void safe(cls:a)
      {  }
    end;class b extends a
      void method();
    end;
      

  6.   

    好象不好实现,用abort不知道行不行
      

  7.   

    搂住问题描述不够清楚,不过这种想法当然是可行的,即所谓“先见之明”。根据实际情况可以有多种做法。比如:
    1、父类设置条件,子类根据条件判断,决定是否执行相应代码。  TParent = class
        procedure OneProc(var CanGo: Boolean); virtual;
      end;  TChild = class(TParent)
        procedure OneProc(var CanGo: Boolean); override;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TParent.OneProc(var CanGo: Boolean);
    begin
      CanGo := ClassType.ClassNameIs('TParent');  //如果是通过子类而不是TParent本身调用方法OneProc,则设置CanGo = False;
    end;procedure TChild.OneProc(var CanGo: Boolean);
    begin
      inherited;
      if CanGo then ShowMessage('go');  
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      CanGo: Boolean;
    begin
      with TChild.Create do
      begin
        OneProc(CanGo);
        Free;
      end;
    end;2、在父类代码中生成(静态)异常。如:
      TParent = class
        procedure OneProc; virtual;
      end;  TChild = class(TParent)
        procedure OneProc; override;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TParent.OneProc;
    begin
      if not ClassType.ClassNameIs('TParent') then
        Abort;
    end;procedure TChild.OneProc;
    begin
      inherited;
      ShowMessage('go');
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      with TChild.Create do
      begin
        OneProc;
        Free;
      end;
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  8.   

    樓主的需求并不一定要你所說的那樣來解決問題! 通常是這樣來實現:
    將你的
    TForm1.OnClick(Sender:TObject);
    begin
      if XXXXXXX then
         .......            // 防止执行子类中的代码
    end;的Onclick(Sender:Tobject) 改為靜態, 另寫一虛擬方法如: DoOnclick(Sender:Tobject);virtual;
    子類將DoOnclick 做override 
    父類就可以這樣寫
      if not XXXXXXX then
         DoOnclick // 防止执行子类中的代码