C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 継承について


(過去ログ 62 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■35491 / inTopicNo.1)  継承について
  
□投稿者/ よしひろ (1回)-(2009/05/06(Wed) 03:23:00)

分類:[その他の言語] 

言語問わずで継承について不明なことについて質問いたします。

クラスAをクラスBが継承する場合ですが
Aでインスタンス変数AAがある場合
クラスBでもしようすることが出来るとおもいます(他の言語はわかりません。Rubyでは可能です)

ですが、その使い方はクラスAの中身を確認してAAというインスタンス変数があることを知っていなければならないと思います。
継承とはそもそもクラスAを知らなくても?というのがあるとおもうんですが、
それはカプセル化?

つくり的にそういったことはやめたほうがいいのでしょうか
たとえばクラスAでインスタンス変数AAというものをメソッドの中で使用する場合
クラスBでそのメソッドをオーバーライドするとするとインスタンス変数を触らなければならないかもしれません。

継承したクラスBでもインスタンス変数をつかうようにするのは普通でしょうか、やめたほうがいいのでしょうか
宜しくお願い致します。
引用返信 編集キー/
■35492 / inTopicNo.2)  Re[1]: 継承について
□投稿者/ επιστημη (1907回)-(2009/05/06(Wed) 03:47:08)
επιστημη さんの Web サイト
2009/05/06(Wed) 04:21:17 編集(投稿者)
...申し訳ない、何言いたいんだかさっぱりわからんのですが(日本語的意味で)。

[C#]
class A {
  protected int AA; // publicまたはprotectedなら派生クラスから変更可能
}

class B : A {
  public void f() {
    AA = 0; // A.AAを書き変える
  }
}

↑こーゆーことをやっていいか? でしょうか。
Aの設計者が「AAはAの派生クラスが書き変えてもよい」と考えるなら構わんでしょう。

引用返信 編集キー/
■35495 / inTopicNo.3)  Re[2]: 継承について
□投稿者/ やじゅ (985回)-(2009/05/06(Wed) 09:50:11)
やじゅ さんの Web サイト
インスタンス変数(フィールド変数)の公開がいいのかどうかって
悩んでいるのかな?

公開されたフィールドは存在が悪であるということ
http://d.hatena.ne.jp/ladybug/20070328#p2
なぜフィールドを公開してはいけないのか
http://blogs.wankuma.com/carbonara/archive/2007/04/02/69830.aspx
引用返信 編集キー/
■35498 / inTopicNo.4)  Re[2]: 継承について
□投稿者/ よしひろ (2回)-(2009/05/06(Wed) 14:24:08)
日本語だめで申し訳ありません。

いいたいことはεπιστημη さんの通りです

クラスB で クラスAを継承した場合:
クラスB でAAを使う場合にAAが一体何なのかというのを理解していないと使えないと思いました。

カプセル化という意味でもできてないのでは?と思いました。




No35492 (επιστημη さん) に返信
> 2009/05/06(Wed) 04:21:17 編集(投稿者)
>
> ...申し訳ない、何言いたいんだかさっぱりわからんのですが(日本語的意味で)。
>
> [C#]
> class A {
> protected int AA; // publicまたはprotectedなら派生クラスから変更可能
> }
>
> class B : A {
> public void f() {
> AA = 0; // A.AAを書き変える
> }
> }
>
> ↑こーゆーことをやっていいか? でしょうか。
> Aの設計者が「AAはAの派生クラスが書き変えてもよい」と考えるなら構わんでしょう。
>
引用返信 編集キー/
■35500 / inTopicNo.5)  Re[3]: 継承について
□投稿者/ επιστημη (1908回)-(2009/05/06(Wed) 15:30:23)
επιστημη さんの Web サイト
> カプセル化という意味でもできてないのでは?と思いました。

ならば「メンバ変数は原則private」で押し通すが無難でしょうね。

引用返信 編集キー/
■35501 / inTopicNo.6)  Re[4]: 継承について
□投稿者/ 倉田 有大 (586回)-(2009/05/06(Wed) 16:22:25)
2009/05/06(Wed) 17:35:26 編集(投稿者)

>継承したクラスBでもインスタンス変数をつかうようにするのは普通でしょうか、やめたほうがいいのでしょうか
宜しくお願い致します。

やっぱり、ケースバイケースじゃないのかな。
C#ではフィールドはたいていprivateで、継承先に公開したいやつはプロパティーにしているので、フィールドを直接継承先が使うことは少なくなったかな?
引用返信 編集キー/
■35522 / inTopicNo.7)  Re[3]: 継承について
□投稿者/ ぱぱいやん (13回)-(2009/05/07(Thu) 18:36:04)
ぱぱいやん さんの Web サイト
構文的な問題なのか、設計的な問題なのか、コーディング規約による問題なのか、ということではないでしょうか?

class A {
  public virtual int AA { get; set; }
}

たとえば、上記のように書かれていれば、構文的にはオーバーライドしても良い訳ですが、AA が何を意味するプロパティなのかがわからないという問題なら、それはプロパティ名を明確にしようとか、コメントを適切に書こうとか、そういった問題ですよね。
また、AA の意味や使い方がわかっていて、オーバーライドすべきでないと考えるなら、private なりで隠ぺいされていないという問題になります。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -