3

我有一个类 List 的通用类tMyList<B>,其方法 Each() 迭代每个元素并tMyList<A>.enumProc使用参数调用匿名过程 - 当前类型的项目<B>。我想将该类实现为接口,以便于生命周期管理。

问题是我不能在iMyList<A>接口中声明 Each 方法,因为tMyList<A>.enumProc类型未知。据我所知接口不支持嵌套类型?

这是代码:

  tMyList<B> = class;

  iMyList<A> = interface
    procedure each(enumProcedure: iMyList<A>.enumProc); // ERROR - Undeclared identifier: 'enumProc'
  end;

  tMyList<B> = class(tInterfacedObject, iMyList<B>)
    type
      enumProc = reference to procedure(item: iMyList<B>);
    public
      procedure each(enumProcedure: enumProc);
  end;

* 在这种特殊情况下,实施枚举器不是一种选择

4

1 回答 1

3

使这项工作起作用的唯一方法是在实现类之外定义过程类型。像这样:

type
  IMyIntf<A> = interface;

  TMyProc<A> = reference to procedure(Intf: IMyIntf<A>);

  IMyIntf<A> = interface
    procedure Foo(Proc: TMyProc<A>);
  end;

  TMyClass<A> = class(TInterfacedObject, IMyIntf<A>)
    procedure Foo(Proc: TMyProc<A>);
  end;
于 2013-09-07T20:03:43.170 回答