virtual
C#の目的は何ですか? それを使用する適切な方法と理由は何ですか?
たとえば、クラス (たとえば、レストランなど) でpublic virtual ICollection<Order> Orders { get; set; }
コレクションの注文を定義する場合です。Client
ここで仮想を使用する理由は何ですか? それは何をしますか、そしてそれを使用する一般的な正しい方法は何ですか?
仮想関数は C# に固有のものではありません。それらは、特定の基本クラスのオブジェクトで動作するように実装されたアルゴリズムが、クラスの実装の詳細を知らなくても、クラスから派生したクラスParent
のオブジェクトで機能し続けることを可能にします。Child
Parent
Child
簡単な例: Object.ToString。さまざまなコントロールを備えたフォームがある場合があります。どのようなコントロールがあるかを確認したい場合は、次のようにします。
foreach (control in form.Controls)
Debug.Print(control.ToString())
Object
各コントロールは、祖先ツリーに常にクラスを持つ特定のクラスに属しており、オーバーライドToString
して独自の意味のある実装を提供できます。ToString
ただし、これを機能させるために、フォームで使用する各コントロール クラスの実装の詳細を知る必要はありません。ToString
オーバーライドされたかどうかを知る必要さえありません。
クラス ライブラリの設計者は、デフォルトのメソッド実装が一見非常に汎用的であると予想される場合でも、意図的にクラス メソッドを仮想としてマークすることがあります。これは、将来の柔軟性のために行われます。これはあなたのpublic virtual ICollection<Order> Orders { get; set; }
例に当てはまるかもしれません。将来、クラスから新しいクラスを派生させる可能性のある開発者には、プロパティClient
の代替動作を提供するオプションがありOrders
ます。たとえば、注文の処理を担当するベース ライブラリのコードは、バイナリ レベルで、このような新しいクラスで引き続き正しく動作します。ベース ライブラリを再コンパイルする必要はありません。