仮想メンバ
更新 : 2007 年 11 月
virtual (Visual Basic では Overridable) メンバを使用すると、メンバの異なる実装を提供することによってそのメンバの動作を変更できます。通常、仮想メンバは、型の派生クラスを使用して特定のシナリオの詳細を処理する場合に使用します。たとえば、WebRequest クラスは、任意の URI (Universal Resource Identifier) に対して要求を送信するための機能を定義します。FtpWebRequest クラスは WebRequest の派生クラスであり、その仮想メソッドをオーバーライドすることにより、ファイル転送プロトコル (FTP: File Transfer Protocol) スキームを使用する URI に対する要求の送信を処理します。
仮想メンバのパフォーマンスはコールバックやイベントよりも優れていますが、非仮想メソッドよりは劣ります。
十分な理由があり、仮想メンバのデザイン、テスト、および保守に関連するすべてのコストを認識している場合を除き、メンバを仮想メンバにしないようにします。
異なるバージョン間で仮想メンバの実装を変更すると、バージョン間に細かな非互換性が生じる可能性があります。このため、仮想メソッドを正確にデザインし、徹底的にテストするには大きなコストがかかります。
仮想メンバに対しては、パブリックなアクセシビリティよりも、保護されたアクセシビリティを選択します。パブリック メンバは、必要に応じて、プロテクト仮想メンバ関数を呼び出すことにより機能拡張を提供する必要があります。
継承を伴わないすべてのシナリオに必要なメンバはパブリックである必要があります。
Portions Copyright 2005 Microsoft Corporation.All rights reserved.
Portions Copyright Addison-Wesley Corporation.All rights reserved.
デザイン ガイドラインの詳細については、2005 年に Addison-Wesley から出版されている Krzysztof Cwalina、Brad Abrams 共著の『Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries』を参照してください。