Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。761件91タイトルの文面がどこで得た情報なのかが記憶が定かではないのですが、C#において、抽象クラスにはなるべく実装メソッドは書くべきではないと見聞きしたような覚えがあります。上文の通り、どこで得た情報なのかが定かではなく、故に記憶違いの可能性もあり正しい知識なのか不安になったため、ここで質問させていただきます。Webで調べてみても、解説しているコードの抽象クラス内に「抽象メソッド」と「実装されているメソッド」が混在しており、「タイトルの内容は間違いでは?」と半ば結論付けてはいるのですが、確信があるわけではありません。されているメソッドを「実装メソッド」と呼称します。抽象クラスHogeBaseクラス内に、抽象メソッドHogeCalc、実装メソッドHogeDrawがあるHogeBaseクラスを基底クラスとし、複数の派生クラスを作成する。HogeManagerクラスは作成した各派生クラスのHogeDrawを呼ぶ。この時、派生クラスではHogeCalcを実装。その他の必要な初期化以外の記述は行わない。派生クラス全てに共通した変数の初期化や計算、インスタンスの生成等はHogeBaseクラスで行う。この「派生クラス全てに共通した変数の初期化や計算、インスタンスの生成等はHogeBaseクラスで行う。」において、共通しているから基底クラスで実装しているものの「あくまで基底なんだからそこで初期化とか計算とか行うべきではない?」と考えてしまい、これがタイトルの内容につながっています。長文になってしまい申し訳ありません。正誤のご教授の方、よろしくお願いいたします。票11「実装メソッド」を一つも持たない型はC#では抽象クラスとは別の存在interfaceとなります。「抽象クラスにはなるべく実装メソッドはない方が良い?」が真だとするとそれは抽象クラスではなくなるため正しくないと思います。全てのストリームの基底となるSystem.IO.StreamはIStreamのようなinterfaceとはされておらず抽象クラスとされ、また多数の「実装メソッド」を持っています。この設計に倣うのであれば抽象クラスは実装メソッドを大いに持つべきです。これらはあくまでC#言語における設計であり、他の言語ではまた事情が異なってきます。|-1そもそもオブジェクト指向において継承はコードの共通化という目的のために存在していると思います。コードの共通化という目的を満たさないのであれば、継承階層を構築してしまうというデメリットを支払えないと思います、抽象メソッドができることはシグニチャを縛ることでこれはコード量の削減には一切寄与しません。コードの共通化を行えるのは実装メソッドのみです。設問者が提示する話ですが、処理の共通部を担うクラスHogeDrawへのインスタンスへの参照を保持し、処理の差分部をインターフェースIHogeCalcの実装とすれば、継承階層をなくすことができます。(いわゆる継承を使わず、コンポジションでの代用を試みるという設計原則)ここで重要なのがHogeDrawとHogeCalcの役割分担です。HogeDrawがクラスに関わらず不変となるようにCalcとの役割分担ができるのであれば、上記のような継承階層をなくすことが可能ですが、そうでない場合はおそらく継承を使うほうがいいのでしょう。個の銅バッジコードの共通化を目的とした継承は、差分プログラミングという名目で昔流行りましたが、現在では「実装継承」というアンチパターンとされています。継承」でググると色々出てきます。2:52アンチパターンなのは良く知っています。共通化を目的としない継承にはいったいどのような意味があるのでしょうか。大前提として僕は継承自体がそうしたアンチパターンそのものだと指摘しており、代用としてインターフェースやmixinを推奨しているわけなのですが。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。公開5周年をお祝いしましょう!🌸コメントで回答する理由を教えてください関連する質問3C#のインターフェースについて1ディスプレイのカスタマイズでサイズの倍率を変更すると、スクリーンサイズが正しく取得できない0C#におけるIDisposableインターフェース2pythonのmatplotlibのグラフの画像を、VisualStudio(C#)で作ったGUIに表示したい。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。