布団が俺を呼んでいる

丘山大一のぶろぐ

Delphi でインターフェース変数が、他のインターフェースを実装しているかを調べる

Delphi で、「インターフェースで受け取った変数が、他のインターフェースを実装しているか」
をどのように調べるのかが分からなくて苦戦したのでメモ。

調べる前 「isでいけるいける」
コードを書いた後 「isだとコンパイル通らないやん……」

というわけで、正解はこんな感じ。


ソースは、ブラック企業から社員を取得し、その人物がプログラマーならなら残業させるというもの。

procedure hoge;
var
  IShain : ISalaryman;
  IShachiku :IProgramer;
begin
  IShain := BlackCompany.Shain;
  if Supports(IShain, IProgramer, IShachiku) then
    IShachiku.Zangyou;
end;

BlackCompany.Shainから返された値を、ISalaryman インターフェースで宣言されたIShainで受けとります。
このIShain変数の実体が、IProgramer インターフェースを実装しているかどうか調べるのがSupports メソッドです。
実装していないならFalse、実装されているならTrue が返り、第三引数(サンプルではIShachiku)にIProgramer にキャストされたものが入ってきます。
これでIShachiku 変数には、IProgramer 型が入ってきます。
後は残業させればよいヨロシ。

詳細は

下記の本に書いてあります(宣伝)



コメントを書く