R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

R流、一瞬でわかる.NETオブジェクト指向プログラミング入門7

http://blogs.wankuma.com/rti/archive/2007/08/07/89226.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門6

http://blogs.wankuma.com/rti/archive/2007/08/02/88399.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門5

http://blogs.wankuma.com/rti/archive/2007/07/31/87955.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門4

http://blogs.wankuma.com/rti/archive/2007/07/30/87742.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門3

http://blogs.wankuma.com/rti/archive/2007/07/26/87105.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門2

http://blogs.wankuma.com/rti/archive/2007/07/25/86988.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門1

の続きです。

どこからフォローすれば良いのかわからないので、先頭から順に行ってます。

今回は

アクセス修飾子

というテーマです。


クラスやメンバには、アクセス修飾子を付けることができます。
アクセス修飾子には、以下のようなものがあります。


public ・・・・・・・全体に公開
internal ・・・・・・同じアセンブリのみ公開。
protected・・・・・・派生したクラスにのみ公開
internal protected ・同じアセンブリ内で派生したクラスにのみ公開
private・・・・・・・自クラスのみ公開


自分のクラスだけで使う汎用性の高いメソッドは private にしておくとか、継承したクラスで使うかもしれなければ protected にするとか、そういう使い方ですね。
慣れないうちは、public と private くらしか使わなくても大丈夫です(w)

基本的には、様々な用途に応じて、何を見せるべきか、何を隠すべきかを考えます。

例えば、ユーザー認証するダイアログボックスを作る場合を考えます。
これは、フォームにユーザー名テキストボックスと、パスワードテキストボックスを配置して、OK・キャンセルボタンを配置すれば良いだけですね。

さて、このユーザー認証ダイアログボックスをひとつのオブジェクトとして見た時、どんなメンバを実装すれば良いでしょうか?

恐らく、このオブジェクトを使う場合、入力されたユーザー名を知りたくなる筈です。
何故なら、認証されたユーザーが誰なのかを知る必要があるからです。
つまり、ユーザー名プロパティを公開します。
一方で、入力されたパスワードはどうでしょうか?

パスワードは、そのユーザーであることを確認するためのデータなのですから、入力されたパスワードを知りたいということはありません。
また、パスワードの平文が、自由にデータとして取得できるのも危険です。
ですから、パスワードはプライベートで良い筈です。

ところで、時々掲示板を見ていると、ユーザー名テキストボックスというコントロールを公開したいと考える初心者の方もいらっしゃいます。
しかし、これは大間違いです。

ユーザー認証オブジェクトを使う側から見ると、ユーザー名テキストボックスコントロールのテキストプロパティにアクセスしなければユーザー名が取得できないなんてわかりにくいですね。
純粋に、ユーザー認証ダイアログボックスに、ユーザー名プロパティメンバがあった方がわかりやすいです。

まあ、結局は、隠す、見せる、の判断だけということでしょうか。

投稿日時 : 2007年8月8日 13:44

Feedback

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門7 2007/08/09 22:56 Gushwell

そういえば、C#はじめたばかりのころ、private class ってどうやって書くのか悩んだっけ。

internal protected って使ったことがないです。

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門7 2007/08/10 15:10 R・田中一郎

>そういえば、C#はじめたばかりのころ、private class ってどうやって書くのか悩んだっけ。

private class ってサブクラス以外の使い道ってあるんでしょうか?

>internal protected って使ったことがないです。

僕もです。こういう同じアセンブリのクラスを継承した場合のみ見えるメンバって、どういう時に使うのか、ちょっと思い浮かびませんね。

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門7 2007/08/10 15:22 凪瀬

>internal protected

内輪でTemplateMethodパターンにしている場合とか
内輪でStrategyパターンにしている場合とか
内輪でCompositeパターンにしてる場合とか

いろいろあるだろうけど継承を活用しているデザインパターンを内輪だけで使いたいって場合では?

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門7 2007/08/10 15:28 R・田中一郎

なるほどっ
そうかそうか。

深く納得です。

# R流、一瞬でわかる.NETオブジェクト指向プログラミング入門9 2007/08/14 17:19 R.Tanaka.Ichiro's Blog

R流、一瞬でわかる.NETオブジェクト指向プログラミング入門9

# R流、一瞬でわかる.NETオブジェクト指向プログラミング入門13 2007/08/31 14:03 R.Tanaka.Ichiro's Blog

R流、一瞬でわかる.NETオブジェクト指向プログラミング入門13

# R流、一瞬でわかる.NETオブジェクト指向プログラミング入門13 2007/08/31 14:30 R.Tanaka.Ichiro's Blog

R流、一瞬でわかる.NETオブジェクト指向プログラミング入門13

タイトル
名前
Url
コメント