ユビキタス世界までの道の駅

アウトドア派のプログラミング奮闘記

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  130  : 記事  0  : コメント  1518  : トラックバック  8

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

姉妹ブログ

イマイチ

ピンとこないのですが、

 

クラスのインスタンスを生成して、各プロパティを使うのですが、

この「Shared」を宣言して使うメソッドがよくわからんね。

 

例えば:

クッキーを焼いて、

できあがったクッキーに異物が混入されていないか検査する。

というのは、

Shared Function Ibutu(ByVal c As Cookie) As Boolean

  [異物混入判断]...(省略)

End Function

クッキーというクラスに、

「たべもんだから、変なものが入っていては困るから、口に入れるまでにちゃんと検査したものを、正式なクッキーと呼ぶんだよ。それがクッキーなんだよ。」

的なことなんだろか。

 

Sharedを使うことによって、スタティックメンバとしたことで、どういうメリットがあるのですかね?

 

呼び方は

[クラス名].[メソッド名] (パラメータ...)

で使えるんです。

 

使い方間違ってたりしてw

投稿日時 : 2007年8月6日 15:07

コメント

# re: 超初心者からの脱却(スタティックメンバShared宣言) 2007/08/06 15:19 まどか
> Sharedを使うことによって、スタティックメンバとしたことで、どういうメリットがあるのですかね?

メリットではなく型の性質ですね。
ですので「どちらがよいか」という問題ではありません。

Stringクラスの
Public Shared Compareメソッド
Public CompareToメソッド
を比較してみるとよいです。
型がメソッドを持つ感覚がわかると思いますよ。


# re: 超初心者からの脱却(スタティックメンバShared宣言) 2007/08/06 16:05 Zee
ありがとうございます。
見てみます^^

# re: 超初心者からの脱却(スタティックメンバShared宣言) 2007/08/06 16:16 シャノン
> たべもんだから、変なものが入っていては困るから、口に入れるまでにちゃんと検査したものを、正式なクッキーと呼ぶんだよ。それがクッキーなんだよ

実に興味深い問題です。
Ibutuに渡すのがCookie型である時点で、それは「ちゃんと出来上がったクッキー」ではないのか、という問題が考えられます。
異物が混入していないものだけがクッキーであるならば、とりあえず焼きあがったけれど未検証のものはまだクッキーではないわけで、じゃあその「未検証の焼き菓子」の型は何なのさ? と。
「Cookie型である=食べられるクッキーである」ということを保証するのなら、コンストラクタの最後に検証をして、ダメだったらコンストラクタから例外を投げてしまうという設計もあり得ます。

# re: 超初心者からの脱却(スタティックメンバShared宣言) 2007/08/06 16:30 シャノン
static / shared にはいくつかの使い道があると思います。
例えば…

1:本当に「クラスがメソッドを持っているべき」な場合。
いい例を考えるのが難しいです。
例えば、社員クラスの静的メンバとして、総社員数を持たせるということが考えられます。
しかし、この場合、社員コレクションクラスのインスタンスを作って管理した方が適切だと思います。

2:シングルトンな場合。
見た目は静的ですが、その実、「そのクラスのただひとつのインスタンス」に対する操作です。
例えば Console.WriteLine とか MessageBox.Show とか。
Console.WriteLine は、コンソールはアプリに1つしかないので、2つ以上 new されては困るからこうなっています。
MessageBox は別に new されても困らないんですが、インスタンスをたくさん作っても仕方がないのでこうなっているんでしょう、たぶん。

3:インスタンスを必要としない場合。
例えば Directory.CreateDirectory。
Directory クラスは既に存在するディレクトリを表すクラスですが、それをこれから作ろうとしているわけですから、インスタンスメソッドにすることができません。
ただ、この Directory の例は、Directory クラスの静的メソッドにするより、FileSystem クラスでも設けて、そのメソッドにする方が適切なのにと思います。

# 静的メンバの使い道 2007/08/06 17:24 .COM -どっとこむ-
静的メンバの使い道

# re: 超初心者からの脱却(スタティックメンバShared宣言) 2007/08/06 17:39 Zee
>Console.WriteLine は、コンソールはアプリに1つしかないので、2つ以上 new されては困るからこうなっています。
>MessageBox は別に new されても困らないんですが、インスタンスをたくさん作っても仕方がないのでこうなっているんでしょう、たぶん。
なるほどと思います^^

自分で上げている例はよくないですね・・・・。
正しく理解していなかった、イメージできなかったので、
ありがとうございました。

Post Feedback

タイトル
名前
Url:
コメント: