小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

VB.NETでのシャドウとオーバーライドの違い

まず、VB.NETは、本格的なオブジェクト指向言語です。
オブジェクト指向言語では、『継承』という機能があります。


たとえば、AクラスとBクラスがあって、何かの事情で合併することになりました。
その場合、新たに合併したCクラスをつくるのでなく、AクラスにBクラスが編入すると考えます。
これをオブジェクト指向的にいうと、AクラスはBクラスを継承したといいます。


しかし、AクラスとBクラスに同じ名前の、たとえばCメソッドがあると継承ができません。
そこで、BクラスのCメソッドを隠すシャドウキーワードをAクラスのCメソッドに与えます。
すると継承ができ、継承後は、隠されたBクラスのCメソッドは、呼び出せなくなります。


つぎに、このAクラスのインスタンスをBクラス型の変数に代入したとします。
すると、今度は逆にAクラスのCメソッドが隠れて、BクラスのCメソッドが呼び出せるようになるのです。


このときも、BクラスのCメソッドでなく、AクラスのCメソッドを呼び出したいときは、BクラスのCメソッドにOverridableキーワードを与え、AクラスのCメソッドにOverridesキーワードを与えます。
すると、Bクラス型の変数に代入してもAクラスのCメソッドを呼び出せるようになるのです。


まとめ、シャドウとオーバーライドの違いは、ある意味、クラスベースのメソッド入れ替えがシャドウで、インスタンスベースのメソッド入れ替えがオーバーライドといえるでしょう。


詳しくは、以下を熟読してください。