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

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

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

Re[1]: デリゲートインスタンスの名前ガイドライン


(過去ログ 32 を表示中)

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

■15282 / inTopicNo.1)  デリゲートインスタンスの名前ガイドライン
  
□投稿者/ まどか (485回)-(2008/03/10(Mon) 10:49:24)

分類:[VB.NET/VB2005] 

#VB
次のwakaranaiの名前のガイドラインがよくわかりません。

    Private Sub xxx(ByVal parm As Object)
    End Sub

    Private Delegate Sub xxxHandler(ByVal e As Object)
    Private wakaranai As New xxxHandler(AddressOf xxx)

教えてください。

引用返信 編集キー/
■15284 / inTopicNo.2)  Re[1]: デリゲートインスタンスの名前ガイドライン
□投稿者/ よねKEN (130回)-(2008/03/10(Mon) 11:14:19)
2008/03/10(Mon) 11:16:28 編集(投稿者)

ちょっと調べてみました。
http://msdn2.microsoft.com/ja-jp/library/ms229040(VS.80).aspx

> イベントで使用する型 (C# のイベントの戻り値の型など) の名前には、サフィックス EventHandler を追加します。
> AssemblyLoadEventHandler は、このガイドラインに従ったデリゲート名です。
>
> イベント ハンドラではないデリゲートの名前には、サフィックス Callback を追加します。
> サフィックス Delegate は、デリゲートに追加しないでください。

とありました。
うーん、wakaranaiの部分については触れられてないですね。
普通のフィールドと同じじゃないでしょうか。


#なぬ〜。型の方は、イベント系は〜Handlerとして、それ以外は〜Delegate(または〜Func)
#をよく使っていたよorz。一応MSが推奨してる名前あるのね。
##仕事上はそもそも明示的にDelegateを使う場面がないので、個人的なやつで。

引用返信 編集キー/
■15285 / inTopicNo.3)  Re[2]: デリゲートインスタンスの名前ガイドライン
□投稿者/ まどか (486回)-(2008/03/10(Mon) 11:24:04)
尻にInstanceでも付けとけばいいんでしょうか。。。
xxxProcHandlerInstance.BeginInvoke
引用返信 編集キー/
■15286 / inTopicNo.4)  Re[3]: デリゲートインスタンスの名前ガイドライン
□投稿者/ Hongliang (253回)-(2008/03/10(Mon) 11:37:34)
アセンブリ外部から見えないものについては好きにしろってのが MS のガイドラインですけど。
クラス内部を見る人たちで意識が共有できてればいいんじゃないですか。

私自身は er とか or とかを動詞の後ろに付けることが多いかな。
公開してるプロパティやイベントの内部変数なら頭を小文字にするだけで。
引用返信 編集キー/
■15289 / inTopicNo.5)  Re[4]: デリゲートインスタンスの名前ガイドライン
□投稿者/ まどか (487回)-(2008/03/10(Mon) 13:23:08)
No15286 (Hongliang さん) に返信
> 頭を小文字にするだけで。

これに決定します!
型と変数だからアイコンも違うし。
引用返信 編集キー/
■15290 / inTopicNo.6)  Re[5]: デリゲートインスタンスの名前ガイドライン
□投稿者/ まどか (488回)-(2008/03/10(Mon) 14:49:25)
No15289 (まどか さん) に返信
> ■No15286 (Hongliang さん) に返信
>>頭を小文字にするだけで。
>
> これに決定します!

VBだからだめだ。。。

引用返信 編集キー/
■15299 / inTopicNo.7)  Re[6]: デリゲートインスタンスの名前ガイドライン
□投稿者/ よねKEN (131回)-(2008/03/10(Mon) 19:19:26)
> VBだからだめだ。。。

一応、言語仕様上は大丈夫じゃないですか?
読む人に紛らわしかったり、IDEとの連携は非常に悪くなりますが。

引用返信 編集キー/
■15310 / inTopicNo.8)  Re[7]: デリゲートインスタンスの名前ガイドライン
□投稿者/ 片桐 (77回)-(2008/03/10(Mon) 23:44:21)
片桐 さんの Web サイト
VBはPascal形式が推奨ですね。
プロジェクトの設定で、その辺りの警告レベルを変更できたとは思いますが……
引用返信 編集キー/
■15315 / inTopicNo.9)  Re[1]: デリゲートインスタンスの名前ガイドライン
□投稿者/ myugaru (41回)-(2008/03/11(Tue) 01:05:02)
myugaru さんの Web サイト
2008/03/11(Tue) 01:49:37 編集(投稿者)
2008/03/11(Tue) 01:05:32 編集(投稿者)

<pre>■No15282 (まどか さん) に返信
> #VB
> 次のwakaranaiの名前のガイドラインがよくわかりません。
>
> Private Sub xxx(ByVal parm As Object)
> End Sub
>
> Private Delegate Sub xxxHandler(ByVal e As Object)
> Private wakaranai As New xxxHandler(AddressOf xxx)
>
> 教えてください。
>

えっと悩んだ事なかったです。普通にこうしてました^^;

Private Sub Onxxx(ByVal parm As Object)
End Sub

Private Delegate Sub xxxHandler(ByVal e As Object)
Private xxx As New xxxHandler(AddressOf Onxxx)

追記:↓のコメントのれいさんに私も同意します。上のやつはイベントだったと仮定しておりました。イベントじゃないなられいさん同様に

Private Sub xxxCallback(ByVal parm As Object)
End Sub

Private Delegate Sub xxxHandler(ByVal e As Object)
Private xxx As New xxxHandler(AddressOf xxxCallback)
で私も納得です。
</pre>

引用返信 編集キー/
■15317 / inTopicNo.10)  Re[8]: デリゲートインスタンスの名前ガイドライン
□投稿者/ れい (443回)-(2008/03/11(Tue) 01:26:15)
No15282 (まどか さん) に返信
> #VB
> 次のwakaranaiの名前のガイドラインがよくわかりません。

よねKENさんの投稿にあるように、
イベントなのかどうかで名前付けがことなりますよね。

> Private Sub xxx(ByVal parm As Object)
> End Sub
>
> Private Delegate Sub xxxHandler(ByVal e As Object)
> Private wakaranai As New xxxHandler(AddressOf xxx)

これは「xxxHandler」であって、「xxxEventHandler」ではないですね。
また、引数がsenderとeventargではありません。
Eventキーワードもないです。

とすると、イベントではないのですね?
イベントではない場合、デザインガイドラインに従うなら
Callbackという名前をつけるべきでしょう。

Private Delegate Sub xxxCallback(ByVal e As Object)

ですね。
xxxは何が目的のCallbackなのか、わかるような名前をつけます。
TimerだとかWaitだとかProcessだとか。

このデリゲートで表せるメソッドは、一般に複数あります。
複数ある場合、当然意味が違うので名前付けには困りません。
一つしかない場合はそのままというのも普通なようです。

・デリゲートとメソッドが一対一対応の場合
Private Sub xxx(ByVal parm As Object)
End Sub

・デリゲートとメソッドが一対多対応の場合
Private Sub yyy(ByVal parm As Object)
End Sub

Private Sub zzz(ByVal parm As Object)
End Sub

で、問題はこのデリゲートのインスタンスにどう名前をつけるかですが。
これはクラスのインスタンスにどう名前をつけるのか、というのと同じ問題です。

対象のインスタンスが、スコープ内でどのような役割を担っているか、
それがわかるように名前をつければいいのでしょう。
ですから、まどかさんの示した情報だけでは名前がつけられないと思います。

私はイベント以外のデリゲートをメンバに持つようなクラスを作ったことがありません。
そういった用途は殆どないように思います。


参考までに。
イベントもデリゲートを使って作られているのは周知ですが、
そのデリゲートもクラスのメンバで、名前があります。

Private Event xxx As EventHandler

と宣言すると、「xxxEvent」という名前のEventHandler型のメンバが自動で定義されます。

public event EventHandler xxx;

の場合は「xxx」自体がEventHandler型のデリゲートになります。
引用返信 編集キー/
■15329 / inTopicNo.11)  Re[9]: デリゲートインスタンスの名前ガイドライン
□投稿者/ まどか (489回)-(2008/03/11(Tue) 12:12:46)
No15317 (れい さん) に返信
> Callbackという名前をつけるべきでしょう。

これはちょっと思い違いをしてました。
コールバック?ってのが強かったみたいです。
Handlerのほうがしっくりきてました。

> 私はイベント以外のデリゲートをメンバに持つようなクラスを作ったことがありません。
> そういった用途は殆どないように思います。

イベント仮想関数(On〜)を非同期で呼ぶためのデリゲート宣言をしようとしてました。
#必要に迫られてるので。
引用返信 編集キー/
■15375 / inTopicNo.12)  Re[10]: デリゲートインスタンスの名前ガイドライン
□投稿者/ れい (445回)-(2008/03/12(Wed) 02:48:37)
No15329 (まどか さん) に返信
> イベント仮想関数(On〜)を非同期で呼ぶためのデリゲート宣言をしようとしてました。

XXXイベントを非同期で呼び出したいのではなく、
OnXXXを非同期で呼びたいのですか?

それは珍しい…。

クラス全体をスレッドセーフに実装することはあまりないので、
当然イベントを発生するOnXXXもスレッドセーフであるのは稀ですよね。

引用返信 編集キー/
■15386 / inTopicNo.13)  Re[11]: デリゲートインスタンスの名前ガイドライン
□投稿者/ まどか (490回)-(2008/03/12(Wed) 09:16:15)
No15375 (れい さん) に返信
> XXXイベントを非同期で呼び出したいのではなく、
> OnXXXを非同期で呼びたいのですか?

Onを呼びたいのは仮想メソッドを呼べというガイドライン。
で、イベントを非同期で発生させたいと。
RaiseEventの戻りすら待ちたくないということで。

乱用ややりすぎには注意なんですがね。。。
引用返信 編集キー/
■15389 / inTopicNo.14)  Re[12]: デリゲートインスタンスの名前ガイドライン
□投稿者/ れい (446回)-(2008/03/12(Wed) 10:17:25)
No15386 (まどか さん) に返信
> ■No15375 (れい さん) に返信
>>XXXイベントを非同期で呼び出したいのではなく、
>>OnXXXを非同期で呼びたいのですか?
>
> Onを呼びたいのは仮想メソッドを呼べというガイドライン。
> で、イベントを非同期で発生させたいと。
> RaiseEventの戻りすら待ちたくないということで。
>
> 乱用ややりすぎには注意なんですがね。。。

やっぱりちょっと状況がよくわからないですが、
普通はOnXXXの中で非同期にイベントを呼ぶのではないですか?

OnXXXがいじれないならOnXXXを非同期に呼ばないとだめですが、
それならOnXXXがスレッドセーフでないといけなくて、
でもOnXXXがスレッドセーフである実装なんて殆どないので…。
結局OnXXXがあるクラス全体を別スレッドで動かさないといけない。

OnXXXがいじれるならOnXXXで非同期にイベントを呼ぶのが普通だと思います。


引用返信 編集キー/
■15390 / inTopicNo.15)  Re[13]: デリゲートインスタンスの名前ガイドライン
□投稿者/ よねKEN (132回)-(2008/03/12(Wed) 10:31:53)
#議論のポイントがわからなくなってきたので整理のための質問。

まどかさんがおっしゃっているのは、
Protected Sub OnXxx(e As XxxEventArgs)
RaiseEvent Xxx(Me, e)
End Sub

というようなメソッドがあって、このOnXxxを「非同期で呼びたいといことじゃないです?
ちょうどProcessクラスのExitedイベントのように。
引用返信 編集キー/
■15392 / inTopicNo.16)  Re[14]: デリゲートインスタンスの名前ガイドライン
□投稿者/ れい (447回)-(2008/03/12(Wed) 11:07:22)
No15390 (よねKEN さん) に返信
> #議論のポイントがわからなくなってきたので整理のための質問。

あーすみません。
たしかにずれてるんですが。
何をしたいのかが気になってしまって。

> まどかさんがおっしゃっているのは、
> Protected Sub OnXxx(e As XxxEventArgs)
> RaiseEvent Xxx(Me, e)
> End Sub
>
> というようなメソッドがあって、このOnXxxを「非同期で呼びたいといことじゃないです?
> ちょうどProcessクラスのExitedイベントのように。

中身が見えてれば安全かどうか確認できますが。
一般には安全ではないですよね。

そのへん、どういう状況なのか興味があったのです。
あんまり経験がない話だったので。
引用返信 編集キー/
■15399 / inTopicNo.17)  Re[15]: デリゲートインスタンスの名前ガイドライン
□投稿者/ まどか (491回)-(2008/03/12(Wed) 13:04:09)
No15392 (れい さん) に返信
> あんまり経験がない話だったので。

確かに業務によって違いますね。
今やってるのはハードウェア寄りのやつなもんで。

引用返信 編集キー/
■15400 / inTopicNo.18)  Re[14]: デリゲートインスタンスの名前ガイドライン
□投稿者/ まどか (492回)-(2008/03/12(Wed) 13:05:02)
No15390 (よねKEN さん) に返信
> Protected Sub OnXxx(e As XxxEventArgs)
> RaiseEvent Xxx(Me, e)
> End Sub

ピンポンです。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -