質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

595閲覧

c# 基底クラスの実装について

saki_ABC

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/07/12 01:18

#知りたいこと
基底クラスと派生クラスの実装について、教えてください。

各派生クラスにて、各デバイスのオープン・クローズなどの処理をしようと考えているのですが、
基底クラスには、共通化したいメソッドだけを実装しようと考えています。

そこで、オープン・クローズなどのメソッドを実装するにあたり、
基底クラスでは、メソッドの定義のみしておき実動作はしないコーディングとしてもいいのでしょうか?

実動作としては、
各デバイスに対応した派生クラスにて処理をする予定で、
誤って基底クラスでオープン・クローズなどの処理をした場合には、
失敗値を返そうかと考えています。

失敗値を返すのではなく、例外をスローするのはありでしょうか?

よろしくおねがいします。

#環境
visual studio 2015
visual C#
.NET Framework 4.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

baseクラスで実装を書かないのはありだと思います。
ただ、失敗にするのではなく、普通にabstract classにして、abstractメソッドにしたほうがいいと思います。

投稿2018/07/12 01:26

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saki_ABC

2018/07/12 01:33

abstract classでは継承先に実装を強制することができるんですね! 抽象クラスで形だけ作り、継承先で実装をするように変更しようと思います
guest

0

「メソッドの定義のみしておき実動作はしないコーディング」は基底クラスを抽象クラスとして作成すればよいかと思います。

C#

1abstract class BaseClass 2{ 3 public void 共通処理() 4 { 5 //共通処理 6 } 7 8 // 抽象メソッド 9 abstract protected void open(); 10}

このような感じで作れば

C#

1class SerialClass : BaseClass 2{ 3 protected override void open() 4 { 5 //COMポートのOpen 6 } 7}

みたいな感じでBaseClassを継承したときに、Openメソッドの実装を強要することができます。
(BaseClassを継承し、Openメソッドを実装しなかったらコンパイルエラーとなります)
また、抽象クラスとして作成した場合、インスタンスを作成することができません。
ですので、間違ってインスタンス化しopen/closeを呼び出すということすら出来なくなります。

投稿2018/07/12 02:13

YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まあ、abstract class にせずとも、通常のclass にしといて、
必要なメソッドだけを abstract にするというテもあります

基底クラスでは、デフォルトの動作を記述しておく、というやり方もあります


あ、C#ではabstract含むクラスはabstract class にしなきゃなんないのね。
勘違いしてました

投稿2018/07/12 14:03

編集2018/07/12 15:03
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問