0

virtualC#の目的は何ですか? それを使用する適切な方法と理由は何ですか?

たとえば、クラス (たとえば、レストランなど) でpublic virtual ICollection<Order> Orders { get; set; }コレクションの注文を定義する場合です。Clientここで仮想を使用する理由は何ですか? それは何をしますか、そしてそれを使用する一般的な正しい方法は何ですか?

4

3 に答える 3

0

仮想関数は C# に固有のものではありません。それらは、特定の基本クラスのオブジェクトで動作するように実装されたアルゴリズムが、クラスの実装の詳細を知らなくても、クラスから派生したクラスParentのオブジェクトで機能し続けることを可能にします。ChildParentChild

簡単な例: Object.ToString。さまざまなコントロールを備えたフォームがある場合があります。どのようなコントロールがあるかを確認したい場合は、次のようにします。

foreach (control in form.Controls)
  Debug.Print(control.ToString())

Object各コントロールは、祖先ツリーに常にクラスを持つ特定のクラスに属しており、オーバーライドToStringして独自の意味のある実装を提供できます。ToStringただし、これを機能させるために、フォームで使用する各コントロール クラスの実装の詳細を知る必要はありません。ToStringオーバーライドされたかどうかを知る必要さえありません。

クラス ライブラリの設計者は、デフォルトのメソッド実装が一見非常に汎用的であると予想される場合でも、意図的にクラス メソッドを仮想としてマークすることがあります。これは、将来の柔軟性のために行われます。これはあなたのpublic virtual ICollection<Order> Orders { get; set; }例に当てはまるかもしれません。将来、クラスから新しいクラスを派生させる可能性のある開発者には、プロパティClientの代替動作を提供するオプションがありOrdersます。たとえば、注文の処理を担当するベース ライブラリのコードは、バイナリ レベルで、このような新しいクラスで引き続き正しく動作します。ベース ライブラリを再コンパイルする必要はありません。

于 2013-09-26T02:12:25.253 に答える