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

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

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

Re[6]: Private Shared Functionの使用方法


(過去ログ 22 を表示中)

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

■9696 / inTopicNo.1)  Private Shared Functionの使用方法
  
□投稿者/ スージー (1回)-(2007/11/02(Fri) 15:02:28)

分類:[.NET 全般] 

いつも参考にさせて頂いております。
「C# と VB.NET のサンプル」の以下を参考にさせて頂き入力制限を加えたテキストボックスを作成しました。
http://jeanne.wankuma.com/tips/textbox/permitchars.html

おかげさまで目的は果せたのですがサンプルのコードで疑問が残った箇所がありました。
 Private Shared Function HasPermitChars
 Private Shared Function GetPermitedString
と2つのPrivate Sharedなメソッドがありました。
今回のサンプルコードで上記のメソッドをSharedにする意図がわかりませんでした。

私なりに考えたPrivate Sharedなメソッドを利用する場合です。
 1 Public Shared メソッドから呼び出される。
 2 メンバ変数の定義箇所で初期化のために呼び出される。
 3 インスタンス変数にアクセスさせない。
1と2は今回は関係ないと思いました。
3に関して意図されているかは判断がつきませんでした。

どのような意味があるのかご教授頂きます様お願い申し上げます
引用返信 編集キー/
■9699 / inTopicNo.2)  Re[1]: Private Shared Functionの使用方法
□投稿者/ 囚人 (213回)-(2007/11/02(Fri) 15:14:53)
私は作者じゃないので意図は分かりませんが、「インスタンス変数にアクセスさせない」というよりは「インスタンス変数にアクセスする必要がない」から Shared にするのではないですか?

Shared を外せば、そのメソッドはインスタンス変数にアクセスできるので無駄にスコープが大きくなりますよね?

あとは、Shared にしておけばとりあえず再入可能にし易くなりますよね。
引用返信 編集キー/
■9704 / inTopicNo.3)  Re[1]: Private Shared Functionの使用方法
□投稿者/ まどか (392回)-(2007/11/02(Fri) 15:52:00)
確かにクラス設計の観点からは、Private Sharedだけが存在するのは想像しにくいですね。 Privateで問題ないわけですから。
というわけで、想像にしかなりませんが
・じゃんぬさんのSharedに対するポリシー
・メモリ使用上優位な点がある
というのが私の考えられる想像です。

#もし、「インスタンスに関係の無いものはSharedにするべき」というガイドライン的なものがあるなら、私も倣わないと。
#ありましたっけ?
引用返信 編集キー/
■9707 / inTopicNo.4)  Re[2]: Private Shared Functionの使用方法
□投稿者/ 魔界の仮面弁士 (514回)-(2007/11/02(Fri) 16:18:44)
No9704 (まどか さん) に返信
> #もし、「インスタンスに関係の無いものはSharedにするべき」というガイドライン的なものがあるなら、私も倣わないと。
> #ありましたっけ?

Visual Studio 的にいえば、コード分析警告 CA1822 にあたります。
http://msdn2.microsoft.com/ja-jp/library/ms245046%28vs.80%29.aspx
引用返信 編集キー/
■9708 / inTopicNo.5)  Re[2]: Private Shared Functionの使用方法
□投稿者/ れい (161回)-(2007/11/02(Fri) 16:29:35)

本当のところはご本人の回答待ちでしょうが。

メンバの意味、PrivateやSharedの意味を考えればいいのではないかと。

No9704 (まどか さん) に返信
> 確かにクラス設計の観点からは、Private Sharedだけが存在するのは想像しにくいですね。 Privateで問題ないわけですから。

そうですかね?
Privateで問題ない、という考えを突き詰めたら、
最終的に全部Publicでも問題ない、ということになってしまいそうですが。

> #もし、「インスタンスに関係の無いものはSharedにするべき」というガイドライン的なものがあるなら、私も倣わないと。
> #ありましたっけ?

インスタンスを参照しないメンバは普通そのクラスそのものに対するメンバであるので、
囚人さんの、

No9699 (囚人 さん) に返信
> 私は作者じゃないので意図は分かりませんが、「インスタンス変数にアクセスさせない」というよりは「インスタンス変数にアクセスする必要がない」から Shared にするのではないですか?

のように、普通はSharedになると思います。
ですが、意味によっては
アクセスする必要がなくても、Sharedにしない場合も、私はあります。
継承関係でできない場合もありますし。

引用返信 編集キー/
■9717 / inTopicNo.6)  Re[3]: Private Shared Functionの使用方法
□投稿者/ まどか (393回)-(2007/11/02(Fri) 17:24:03)
> 普通はSharedになると思います。

私の場合はインスタンスではなく型の属性であるという観点で、「インスタンスを作らなければ使えない」ということでPrivateにしてますね。
たぶん、共有メソッド主体のクラスなのかインスタンスクラスなのかをまず考えてしまうという理由もあるのでしょう。

引用返信 編集キー/
■9723 / inTopicNo.7)  Re[4]: Private Shared Functionの使用方法
□投稿者/ れい (164回)-(2007/11/02(Fri) 18:24:24)
No9717 (まどか さん) に返信
>>普通はSharedになると思います。
>
> 私の場合はインスタンスではなく型の属性であるという観点で、「インスタンスを作らなければ使えない」ということでPrivateにしてますね。

結局、メンバの意味ですよね。
インスタンスに付随するメンバであって、
「インスタンスを作らなければ使えないはず」というメンバならPrivateで。

インスタンスではなくむしろクラスそのもののメンバであって、
「インスタンスを作らなくても使えてもいいはず」というメンバならPrivate Sharedで。

件のHasPermitCharsとかGetPermitedStringなら
意味を考えればインスタンスが無くてもその関数には意味がありますから、
Private Sharedでも違和感ありません。
私ならProtectedにしてると思いますが。
引用返信 編集キー/
■9725 / inTopicNo.8)  Re[5]: Private Shared Functionの使用方法
□投稿者/ なちゃ (72回)-(2007/11/02(Fri) 18:48:08)
インスタンスに実は無関係に汎用的な処理をするものは
Sharedにする場合がありますね。

分析の警告はやや微妙な内容だと思いますけどね。
やっぱり意味的に使い分けるのが普通かなと思います。
引用返信 編集キー/
■9741 / inTopicNo.9)  Re[6]: Private Shared Functionの使用方法
□投稿者/ スージー (2回)-(2007/11/03(Sat) 14:24:37)
皆様 ご回答ありがとうございます。
privateなメソッドにインスタンス変数にアクセスしているかどうかでsharedつけるという意識が無かったので勉強になりました。
今後は意識していきたいと思います。
ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -