2016-09-12 1 views
4

コーディングは、インタフェースの制約については、この例があります:このメソッドの呼び出し方法は? 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"メソッドを呼び出すことができますか?実装されたメソッドを呼び出すはずですか?

+1

TはIStoppableとして宣言されているため、IStoppable.Stopを呼び出しています。それはうまく見えます(奇妙な書式を除いて)。 –

+0

多くの感謝私はあなたをすべて抱擁したい:) – Wel

答えて

9

FProcessTIStoppableIStoppable又は由来するものであるインターフェイスであるように制約されるタイプTです。したがって、参照するメソッド呼び出しはStopメソッドをIStoppableと呼びます。

FProcessIStoppableと宣言されていたとします。

FProcess: IStoppable; 

もしそうだったら、コードを理解すると思います。

一般的なコードの理解に苦労しているときは、これは便利なテクニックです。ジェネリック型を具体的な型に置き換えて、コードをもう一度読んでください。具体的なコードを理解する方がはるかに簡単であり、その理解が汎用コードに一般化するのに役立ちます。

ここで具体的なインターフェイスと同じである方法が実装されているところ。インタフェースはインタフェースを定義しますが、実装は指定されません。インターフェイスを実装するクラスは、インターフェイスを使用するためにそのことを知る必要はありませんが、それを指定します。それは本当にインターフェイスのための操作方法です。

5

FProcessは、ジェネリック型Tとして宣言されているが、それはつまり、IStoppableとして、制約で、宣言されている:すべてのTIStoppable(または誘導体)でなければならず、コードはそれがメソッドを呼び出すことができることを確認することができますIStoppable on

インターフェイスでメソッドを呼び出すことはまったく問題ありません。それが存在する主な理由です。それらは基本的に呼び出すことができるメソッドのリストです。

はい、メソッドはどこかに実装する必要があります。それは示されていません。

関連する問題