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

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

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

Re[3]: イベントを登録するときに書く文の意味を教えてください。


(過去ログ 90 を表示中)

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

■54081 / inTopicNo.1)  イベントを登録するときに書く文の意味を教えてください。
  
□投稿者/ AziO (1回)-(2010/10/04(Mon) 21:23:19)
AziO さんの Web サイト

分類:[C++/CLI] 

OS : Windows 7 64bit
IDE : VisualStudio 2008 Professional
C++/CLI (Windowsフォームアプリケーション)

こんにちは。
C++/CLIのイベントの登録を行う際に、
this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);

this->Navigate->Click += gcnew System::EventHandler(this, &Form1::Navigate_Click);
と自動的に追記されるのですが、

gcnewが出てくる意味や、足し算して代入するわけでもないのに += が出てきたり、
&Form:: の & の意味などがまったくわかりません。(Form1_Load はたぶんメソッド名でしょう)

この意味がわかる方教えていただければ光栄です。
引用返信 編集キー/
■54083 / inTopicNo.2)  Re[1]: イベントを登録するときに書く文の意味を教えてください。
□投稿者/ Hongliang (728回)-(2010/10/04(Mon) 22:05:32)
> gcnewが出てくる意味
EventHandler は delegate ですが、delegate も ref class や value struct などと同様に型の一種です(通常、System::MulticastDelegate から派生します)。
ですからインスタンスを作るのには当然 gcnew が必要です。
// C# だと省略もできますが、文法上省略できるだけで実際にはコンパイラが new を補っています。

> 足し算して代入するわけでもないのに += が出てきたり、
イベントには複数のイベントハンドラを追加できます。
例えば
button1->Click += gcnew EventHandler(this, &Form1::Button1_Click1);
button1->Click += gcnew EventHandler(this, &Form1::Button1_Click2);
と書いていれば、button1 をクリックしたら Button1_Click1 メソッドと Button1_Click2 メソッドが両方実行されます。
足し算して代入しているのと意味的に同じでしょう?
ちなみに、イベントだけでなくデリゲートでも同じ事です。

> &Form:: の & の意味などがまったくわかりません。
この & はアドレス演算子です。後ろに記述されているもののアドレスを取得します。
ネイティブの C++ において、デリゲートに相当するのは関数ポインタですが、この関数ポインタの取得に & 演算子を使います。それに記述を合わせたのでしょう。

// C++ を十分理解していないと C++/CLI は凄く難解な言語だと思いますが、大丈夫でしょうか?
// 先に C# を学んだ方が全体として理解が早いかもしれません。
引用返信 編集キー/
■54084 / inTopicNo.3)  Re[1]: イベントを登録するときに書く文の意味を教えてください。
□投稿者/ 774RR (543回)-(2010/10/04(Mon) 22:16:06)
pure C++ はわかるの?
.NET 系の manage なんちゃらあたりはわかる?

new がアンマネージメモリというかアンマネージリソースというかを確保するのに対して
gcnew はマネージメモリというかマネージリソースを確保するもんだ。

C++ では任意のクラスに対して演算子を自分で定義することができるのは OK?
ここでの += は「加算して代入」ではなく「イベントハンドラの追加」になっている。

&Form1 ではなく &(Form1::Form1_Load) で、メンバ関数へのポインタをとってるだけだ。

で、上記の用語でわからないものがあるなら・・・要勉強かな・・・
引用返信 編集キー/
■54086 / inTopicNo.4)  Re[2]: イベントを登録するときに書く文の意味を教えてください。
□投稿者/ AziO (2回)-(2010/10/04(Mon) 22:30:17)
AziO さんの Web サイト
Hongliangさん
774RRさん
回答ありがとうございます。

おおまかな流れは理解できました。ありがとうございます。
今まではなんとなく感覚で入力してたもので意味を詳しく知らなかったので質問させていただきました。

+= がイベントハンドラの追加ということですが、
他の方法で追加はできないのでしょうか?

this->Load = this->Load + gcnew ではいけなかったので・・・。


引用返信 編集キー/
■54087 / inTopicNo.5)  Re[3]: イベントを登録するときに書く文の意味を教えてください。
□投稿者/ 774RR (544回)-(2010/10/04(Mon) 22:44:54)
+= 演算子を自分で定義した場合であっても + 演算子や = 演算子が勝手に定義されることは無いので
x+=y; を x=x+y; と書き下すと違う意味になる。

もしかして初心者?最初に触れる言語がこの C++/CLI だったりする?
俺も C++/CLI でプログラム入門、ってのはお勧めしないな。
C++/CLI ってのはある特定目的のためだけに存在すると言い切っていいんぢゃないかな。

入門ならば pure C++ ないしは C# からはじめるほうが無難だと思う。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -