代码之家  ›  专栏  ›  技术社区  ›  Zoë Peterson RRUZ

接口帮助程序或委派接口父级

  •  2
  • Zoë Peterson RRUZ  · 技术社区  · 15 年前

    如果我有一个 IInterface 子代由第三方实现,我想添加助手例程,Delphi是否提供了任何简单的方法,而不手动重定向每个接口方法?也就是说,给定这样的接口:

    IFoo = interface
      procedure Foo1;
      procedure Foo2;
      ...
      procedure FooN;
    end;
    

    是否支持与以下内容类似的内容?

    IFooHelper = interface helper for IFoo
      procedure Bar;
    end;
    

    IFooBar = interface(IFoo)
      procedure Bar;
    end;
    
    TFooBar = class(TInterfacedObject, IFoo, IFooBar)
    private
      FFoo: IFoo;
    public
      procedure Bar;
      property Foo: IFoo read FFoo implements IFoo;
    end;
    

    我特别想知道如何始终使用单个变量引用(ifoo、ifoo bar或tfoobar)调用foo1、foo2和bar,而不在它们之间切换,也不将ifoo的所有方法添加到tfoobar。

    3 回复  |  直到 15 年前
        1
  •  1
  •   skamradt    15 年前

    将班级改为阅读:

    TFooBar = Class(TInterfacedObject, IFoo, IFooBar)
    private
      FFoo: IFoo;
    public
      procedure Bar;
      property Foo: IFoo read FFoo implements IFoo ;
    end;
    

    您还需要一个构造函数或某种方法来创建ifoo的实例并将其放在ffoo中。

        2
  •  1
  •   Deltics    15 年前

    无法访问的方法 IFOO 通过引用 t挡杆 因为 t挡杆 不执行 IFOO -IT代表 IFOO . 但你不应该使用 t挡杆 无论如何,访问接口对象的引用,首先就是使用接口的全部要点!

    注意:为了故意防止这种情况发生,我采用了一种约定,将类上的接口方法实现为“受保护的”,特别是拒绝访问那些实现细节,除了通过接口本身显示的那样。

    你目前在哪里获得一个参考 t挡杆 ,将此更改为获取 伊福巴尔 接口实现者 t挡杆 你将被分类。

        3
  •  0
  •   LeGEC    15 年前

    我不确定我是否理解你的所有顾虑,但我的建议是:

    IFooBar = interface(IFoo)
      procedure Bar;
    end;
    
    TFooDelegate = class(TInterfacedObject, IFoo )
    private
      FFoo: IFoo;
    public
      property Foo: IFoo read FFoo implements IFoo;
    end;
    
    TFooBar = class( TFooDelegate, IFooBar )
      procedure Bar;
    end;