すべてのメソッドを仮想としてマークする必要がありますか? 質問する

すべてのメソッドを仮想としてマークする必要がありますか? 質問する

Javaではメソッドをfinalとしてマークすることで不可能上書きする。

C#では、メソッドを仮想としてマークする必要があります。可能上書きする。

C# では、クラスを継承する方法がわからない可能性が高いため、すべてのメソッド (オーバーライドしたくないいくつかのメソッドを除く) を仮想としてマークする必要があることを意味しますか?

ベストアンサー1

C# では、オーバーライドを可能にするためにメソッドを仮想としてマークする必要があります。これは、クラスを継承する方法がわからない可能性が高いため、C# ではすべてのメソッド (オーバーライドしたくないいくつかのメソッドを除く) を仮想としてマークする必要があることを意味しますか?

いいえ。言語設計者が仮想がデフォルトであるべきだと考えていたなら、それはデフォルトだっただろう

上書き可能性は特徴、そして他の機能と同様に費用オーバーライド可能なメソッドのコストは相当なものです。特にクラスに「機密性」がある場合は、設計、実装、テストのコストが大きくなります。仮想メソッドは、テストされていないサードパーティのコードをシステムに導入する方法であり、セキュリティに影響を与えます。

クラスをどのように継承するかがわからない場合は、クラスを公開しないでくださいなぜならまだ設計が終わっていません。拡張性モデルは、事前に知っておくべきものであり、設計とテストの戦略に大きな影響を与えます。

私はすべてのクラスが封印されたそしてすべての方法は非仮想現実世界の顧客中心の理由により封印を解除するか、メソッドを仮想化するまで。

基本的にあなたの質問は「顧客が私のクラスをどのように利用するつもりなのか分からないので、任意に拡張可能にすべきか?」です。いいえ、そうすべきです。知識が増える! 「顧客が私のクラスをどのように使用するか分からないので、すべてのプロパティを読み取り/書き込み可能にすべきか?また、すべてのメソッドをデリゲート型の読み取り/書き込みプロパティにして、ユーザーが任意のメソッドを独自の実装に置き換えることができるようにすべきか?」と尋ねる人はいないでしょう。いいえ、理解するまでは、これらのことのいずれも行わないでください。証拠ユーザーが実際にその機能を必要としているかどうかを確認してください。貴重な時間を費やして、ユーザーが実際に求め、必要としている機能を設計、テスト、実装し、知識に基づいて実行してください。

おすすめ記事