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;
Run Code Online (Sandbox Code Playgroud)
我在第15行不明白他怎么称呼"停止"方法?是不是FProcess是一个通用变量?那他怎么能从变量中调用一个方法呢?
他怎么能直接从界面调用"停止"方法呢?是不是应该调用实现的方法?
FProcess是一种类型T,其中T约束为一个IStoppable或一个派生的接口IStoppable.因此调用您引用的方法调用Stop方法IStoppable.
想象一下,这FProcess被宣布为类型IStoppable.
FProcess: IStoppable;
Run Code Online (Sandbox Code Playgroud)
如果是这样,那么我认为你会理解代码.
每当你发现自己在努力理解通用代码时,这是一种有用的技术.用通用类型替换泛型类型并再次读取代码.理解具体代码通常要容易得多,然后理解将帮助您推广通用代码.
就实现该方法的地方而言,这与具体接口没有什么不同.接口定义了接口,但未指定实现.实现接口的类指定了这个,但是为了使用接口,您不需要知道它.这实际上是接口的操作方式.
FProcess被声明为泛型类型T,但声明,在约束,如IStoppable,换句话说:每次T必须是IStoppable(或衍生物)和代码可以肯定的是它可以调用的方法IStoppable就可以了
在接口上调用方法是完全正确的.这是它们存在的主要原因:它们基本上是可以调用的方法列表.
是的,该方法必须在某处实施.这没有显示.
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |