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

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

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

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

Q&A

解決済

4回答

5925閲覧

C#の継承による隠蔽をわかりやすく教えてください.

idai_no_MMD

総合スコア10

C#

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

0グッド

0クリップ

投稿2017/03/13 20:35

##勉強でつまづいていること

C#を独学で勉強しているのですが、つまずいている点が2つあります.

1.派生クラスは基底クラスを受け継いで機能を拡張できるとのことでしたが、その具体的なメリットを教えてください.
2.単独のクラスを推移的に継承できるとのことでしたが、派生クラスのメンバーが基底クラスのメンバーを隠蔽することがあるらしく、なぜ隠蔽するのかを疑問に思いました.

以上の2点です.よろしくお願いします.

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

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

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

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

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

guest

回答4

0

1 書ききれないので、オブジェクトの多態性について調べてください。一例を言えば、デザイナーでコンポーネントを同じ手順で貼り付けることができますが、これはそれらのコンポーネントがすべて
Component クラスを継承しているからです。

2 new 演算子による基底メンバーの隠蔽のことだろうと思いますが、滅多に出番はありません。通常は隠蔽ではなくオーバーライドを使います。
オーバーライドできないメンバーを隠蔽によって無理やり上書きさせなければならない事態に出会ったら、設計が悪いのでやり直してください。基底クラスにキャストした時とそうでない時で挙動が変わり、発見しにくいバグになります。
隠蔽が必要な場面としては、例えば Equals がありますが、説明は書ききれないので省略します。

なぜ両者ともに書ききれないかと言うと、説明の前提として必要な知識が不足していると思われるからです。こんなところでチョコチョコっと聞いて理解したつもりになるのではなく、もっと基礎の部分を学習してください。

追記

Equals も通常オーバーライドするので例として不適切でした。複数のインターフェースを実装し、それらに同じシグネチャーのメソッドが含まれている際にメンバーの隠蔽が使われることがあります。例えばジェネリックインターフェースの場合に起こりえます。

投稿2017/03/13 22:49

編集2017/03/13 23:29
Zuishin

総合スコア28660

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

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

guest

0

ベストアンサー

かなり極端なのですが


家でたとえさせてもらいます

基底クラスとして「骨組み」を作ります
そして家1クラスを作ったときに基底クラスの骨組みを継承すると既に骨組みが完成された状態になります。
あとはこのクラスに肉付けをするだけで家が完成します。
新しく家2を作る場合でも骨組みを継承すれば作業は肉付けだけになります。

わざわざ毎回毎回骨組みを作るのは面倒なので最初から作っておいてそれを活用しようというのが継承のメリットです。


おそらくオーバーライドのことだと思います。
1の続きで骨組みを継承したけど少し形を変えたいと思った場合に新しく宣言できるということです。
ここで隠蔽しなかったら基底クラスの骨組みまで変わってしまいます。

ホントに極端なのでいろいろと抜けている部分があります。
いろいろ調べると出てくると思いますので調べてみてください。

投稿2017/03/14 05:56

dekky0910

総合スコア93

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

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

idai_no_MMD

2017/03/14 08:38

イメージがわかりやすかったです. ありがとうございます.
guest

0

端的に。

1.派生クラスは基底クラスを受け継いで機能を拡張できるとのことでしたが、その具体的なメリットを教えてください.

新しいクラスを作るときに基底クラスと同様のロジックを記述しなくて良いです。

2.単独のクラスを推移的に継承できるとのことでしたが、派生クラスのメンバーが基底クラスのメンバーを隠蔽することがあるらしく、なぜ隠蔽するのかを疑問に思いました.

オーバーライドのことでしょうか。
特定のメンバーの処理だけ変えたい場合は基底クラスのメンバーを上書きできる(基底クラスのメンバーは隠蔽する)のは便利じゃないでしょうか。

投稿2017/03/14 00:06

workaholist

総合スコア559

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

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

idai_no_MMD

2017/03/14 08:39

参考になりました. ありがとうございます.
guest

0

まずは、
”C#” 継承
で google 検索したり、
C# の入門書籍を読むとよいと思います。

その上で疑問があれば,その点のついて具体的に teratail などへ質問を投稿するとよいとおもいます。

投稿2017/03/13 21:35

katoy

総合スコア22324

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

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

idai_no_MMD

2017/03/14 08:34

言われてみれば、最もですね笑 ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問