如何调用此方法?

时间:2016-09-12 12:26:07

标签: delphi

Delphi书中的编码有关于接口约束的这个例子:

1    type
2      IStoppable  =  interface
3        procedure Stop;
4      end;
5
6      TWidget<T: IStoppable>  =  class
7        FProcess: T;
8        procedure StopProcess;
9      end;
10
11   { TWidget<T> }
12
13   procedure  TWidget<T>.StopProcess;
14   begin
15     FProcess.Stop;
16   end;

我在第15行不明白他如何称之为“停止”方法?是不是FProcess是一个通用变量?那他怎么能从变量中调用一个方法呢?

他怎样才能直接从界面调用“Stop”方法?是不是应该调用已实现的方法?

2 个答案:

答案 0 :(得分:9)

FProcess属于T类型,其中T被约束为IStoppable的接口或IStoppable派生的接口。因此,您引用的方法调用调用Stop的{​​{1}}方法。

想象一下,IStoppable被声明为FProcess类型。

IStoppable

如果是这样,那么我认为你会理解代码。

每当你发现自己在努力理解通用代码时,这是一种有用的技术。用通用类型替换泛型类型并再次读取代码。理解具体代码通常要容易得多,然后理解将帮助您推广通用代码。

就实现该方法的地方而言,这与具体接口没有什么不同。接口定义了接口,但未指定实现。实现接口的类指定了这个,但是为了使用接口,您不需要知道它。这实际上是接口的操作方式。

答案 1 :(得分:5)

FProcess被声明为泛型类型T,但在约束中声明为IStoppable,换句话说:每个T必须是{{} 1}}(或派生),代码可以确保它可以在其上调用IStoppable的方法

在接口上调用方法是完全正确的。这是它们存在的主要原因:它们基本上是可以调用的方法列表。

是的,该方法必须在某处实现。这没有显示出来。