すべてのメソッドをvirtualにする必要がありますか?
質問
Javaではメソッドをfinalとしてマークすることで 不可能 をオーバーライドすることができます。
C#ではメソッドをvirtualとしてマークすることで 可能 をオーバーライドする必要があります。
C#では、クラスがどのように継承されるかわからない場合がほとんどなので、(オーバーライドされたくないいくつかのメソッドを除いて)すべてのメソッドをvirtualにマークすべきということでしょうか。
どのように解決するのですか?
C#では、オーバーライドを可能にするために、メソッドをvirtualとしてマークする必要があります。C#では、クラスがどのように継承されるかわからないため、(オーバーライドされたくないいくつかのメソッドを除いて)すべてのメソッドをvirtualにマークする必要があるということでしょうか。
いいえ。もし言語設計者がvirtualをデフォルトにすべきと考えたのなら がデフォルトだったでしょう。 .
オーバーライド可能性は 機能 であり、他の機能と同様に コスト . オーバーライド可能なメソッドのコストは相当なものです。大きな設計、実装、およびテストのコストが発生し、特にクラスに対して何らかの感度がある場合はそうです。
クラスをどのように継承させたいのかがわからない場合は クラスを公開しないでください。 なぜなら まだ設計が終わっていないからです。 拡張性モデルは間違いなく前もって知っておくべきことで、設計とテストの戦略に深く影響するはずです。
私は、すべてのクラスが シールされた であり、すべてのメソッドは 非仮想 であり、すべてのメソッドはでなければなりません。
基本的にあなたの質問は、「私は顧客がどのように私のクラスを利用しようとしているのか知らないので、任意に拡張可能にするべきでしょうか? 知ることができるようになる ! 顧客が私のクラスをどのように使用するのか分からないので、すべてのプロパティを読み書きできるようにすべきでしょうか? また、すべてのメソッドを読み書き可能なデリゲートタイプのプロパティにして、ユーザーが任意のメソッドを独自の実装に置き換えることができるようにするべきでしょうか? 証拠 という証拠を得るまでは、そのようなことはしないでください。 ユーザーが実際に必要とする機能を設計、テスト、実装するために貴重な時間を費やし、知識のある立場からそれを行ってください。
関連
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み] コンストラクタ内の仮想メンバー呼び出し
-
[解決済み】Javaでfinalキーワードを使用するとパフォーマンスが向上しますか?
-
[解決済み] Javaで仮想関数/メソッドを書けますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました