布団が俺を呼んでいる

丘山大一のぶろぐ

Oracle DBリンク関連の情報を取得

自分メモ。DBリンクを呼び出す処理を見ることになったのですが、機能が独特でよく分からん。基本的にデータベース同士を密結合する機能なのであまり使うべきではないかな、という感じもしている。色々取得1.DB [もっと読む]

Oracle データベースをOracle SQL Developerでアクセス

この本の中ではSQL Plus を使って操作しているのですがOracleの基本 ~データベース入門から設計/運用の初歩まで新品価格¥2,851から(2019/7/31 19:33時点)面倒になってきた [もっと読む]

Oracle データベース操作基礎の基礎

SQLPlus の使い方基本メモともいう。データベースに接続して基本的なSQLを投げるまで。SQLPlusの実行方法スタートメニューに登録されているOracle-hogehoge - SQL Plus [もっと読む]

Oracle データベース挑戦と敗北のメモ

Microsoftの整備された道を歩んできた者にはOracle のハードルが高く感じる模様。失敗につぐ失敗例。まず紹介するのは、成功した手順。https://www.oracle.com/techne [もっと読む]
布団が俺を呼んでいる | Delphi でインターフェース変数が、他のインターフェースを実装しているかを調べる

布団が俺を呼んでいる

丘山大一のぶろぐ

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 型が入ってきます。
後は残業させればよいヨロシ。

詳細は

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



コメントを書く