satakesatakeの日記

 | 

2009-09-29

VBAでのインターフェースの罠

| 17:10

VBAでは、クラスに実装のないメソッドやらプロパティを記述すると*1、それがインターフェースとして扱われ、具象クラスでImplements宣言して、メソッドの内容を実装する。

しかし、不用意にインターフェースを記述すると、具象クラスのほうで、にっちもさっちも行かなくなることがある。

  • インターフェース継承した具象クラスは、メソッドの実装を強要される
    • メリット
      • 実装のし忘れがなくなる
      • メソッドのスペルミスがなくなる
    • デメリット

これは非常に困るわけだ。

インターフェースで宣言した以外のPublicメソッドは作成できない、ということは、具象クラス固有のメソッドを生やせないということだ。加えて、複数のインターフェース継承し、具象クラスは作れない。親インターフェース継承した子インターフェースも作れない。がんじがらめの状況。

唯一の解決方法は、インターフェースを使わないこと。そうなると、Dimでインターフェースとして宣言したオブジェクト多態性は確保されなくなる。

これではVBAでのインターフェースの意義が疑問視される。前にも書いたが、単にコンパイルエラーを吐き出させるための宣言に過ぎない。

*1:実装を書いちゃっても良いみたいだが、もうよくわからんので調べる気力なし。

MMMM2015/09/07 19:16implements ClassA 宣言して、 Implements ClassA を宣言したオブジェクトを
メンバーにしようとすると、エラーが起こるんですえね。。。

 |