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

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

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

Re[5]: RoutedEventArgs.Empty


(過去ログ 111 を表示中)

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

■65645 / inTopicNo.1)  RoutedEventArgs.Emptyについて
  
□投稿者/ らぐんす (12回)-(2013/03/13(Wed) 10:50:11)

分類:[.NET 全般] 

いつもお世話になっております。
Windowsフォームコントロールで独自のイベントを実装するとき、私はしばしば以下のように記述しております。
public event EventHandler Foo;
protected virtual void RaiseFoo() {
if (Foo!=null) {
Foo(this, EventArgs.Empty);
}
}
Silverlightコントロールで同様のことを
protected virtual void RaiseBar() {
if (Bar != null) {
//Bar(this, RoutedEventArgs.Empty);//←コンパイルエラーが表れる
Bar(this, null);//←仕方がないのでこのように書いているが気持ち悪い }
}
を記述するとRoutedEventArgs.Emptyにコンパイルエラーが表れます。
恥ずかしながらこの理由が分かりません。
ご教授お願いいただけないでしょうか?
引用返信 編集キー/
■65646 / inTopicNo.2)  Re[1]: RoutedEventArgs.Emptyについて
□投稿者/ らぐんす (13回)-(2013/03/13(Wed) 10:53:34)
連続ですみません。一部ソースが抜けておりました。
public event RoutedEventHandler Bar;
protected virtual void RaiseBar() {...
よろしくお願い致します

引用返信 編集キー/
■65649 / inTopicNo.3)  Re[2]: RoutedEventArgs.Emptyについて
□投稿者/ shu (221回)-(2013/03/13(Wed) 11:31:06)
No65646 (らぐんす さん) に返信
RoutedEventArgsにはstaticのEmptyが定義されていないから。
同じように書くならEventArgs.Emptyになります。
引用返信 編集キー/
■65668 / inTopicNo.4)  Re[3]: RoutedEventArgs.Emptyについて
□投稿者/ らぐんす (14回)-(2013/03/13(Wed) 18:22:55)
shu様、ありがとうございます
Bar(this, EventArgs.Empty);と書いてもエラーになります。
RoutedEventArgsは、EventArgsを継承しているため、
当然使えると思ったのですが…
staticが付くと何か制限があるのでしょうか?
引用返信 編集キー/
■65671 / inTopicNo.5)  Re[4]: RoutedEventArgs.Empty
□投稿者/ Azulean (114回)-(2013/03/13(Wed) 22:58:21)
2013/03/13(Wed) 23:01:14 編集(投稿者)

No65668 (らぐんす さん) に返信
> Bar(this, EventArgs.Empty);と書いてもエラーになります。
> RoutedEventArgsは、EventArgsを継承しているため、
> 当然使えると思ったのですが…

なぜでしょうか。
EventArgs 型の引数に RoutedEventArgs 型のオブジェクトが渡せるのは当然ですが、その逆、RoutedEventArgs 型の引数に EventArgs 型のオブジェクトが渡せないのも当然です。
従って、「当然使える」という結びつけは、継承関係を誤解されているのではないかと思われます。
(static 要素は継承されません。仮に継承されたとしても、EventArgs 型になるので RoutedEventArgs 型の引数には渡せません)


Empty がないのなら、毎回 new RoutedEventArgs() で作って渡すなり、一度作ってフィールド変数あたりにキャッシュしておくなり、どうとでもできると思いますが…。
引用返信 編集キー/
■65683 / inTopicNo.6)  Re[5]: RoutedEventArgs.Empty
□投稿者/ らぐんす (15回)-(2013/03/14(Thu) 10:34:48)
Azulean様、
>RoutedEventArgs 型の引数に EventArgs 型のオブジェクトが渡せない
>static 要素は継承されません。仮に・・・

なる程EventArgs.EmptyはEventArgs型の静的な定数のようなものであるから、
public delegate void RoutedEventHandler(object sender, RoutedEventArgs e);
の第2引数にRoutedEventArgs.Emptyを渡せないのは当然という、解釈でよろしいでしょうか?
昨晩はピンと来なかったのですが、なぜか今朝は合点が行きました。

>毎回 new RoutedEventArgs() で作って渡すなり・・・
newはコストがかかるというイメージが本で植えつけられているため貧乏性のわたしは、すぐnullでいいかな?思ってしまうのですが、
>一度作ってフィールド変数あたりにキャッシュしておくなり・・・
この発想はありませんでした。これから多用したいと思います。

これにて解決とさせて頂きます。
Azulean様、shu様、この度はありがとうございました。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -