- - PR -
[ASP.NET]Page継承クラスのイベントについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-01 17:48
お世話になっておりますm(_ _)m
Page継承クラスのイベントについて質問させてください。(言語:VB) 今、Pageクラスを継承して独自のPageクラス(ここではOriginalPageとします)を作成しました。 その中でページロード時に独自の処理を入れたいのでイベントを記述しました。 以下は、OriginalPageクラス内に書いたイベントです。 ------------------------------------------------------------------------------ Public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'ここに独自の処理を書きます。 End Sub ------------------------------------------------------------------------------ そして、テストとして新しくこのOriginalPageクラスを継承したページを作成してみました。(ここではtestPage.aspx.vb) 今度はtestPage.aspx.vb独自にページロードが呼ばれた際にいろいろやりたい処理が あるので、書こうとしたら、 エラーメッセージが波線で、 『sub'Page_Load'は、ベースclass'OriginalPage'のsub'Page_Load'と競合しているため'Shadow'と宣言しなければなりません。』 と出てきます。 以下は、testPage.aspx.vb内に書いたページロードする際のイベント関数です。 ------------------------------------------------------------------------------ Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' ページを初期化するユーザー コードをここに挿入します。 End Sub ------------------------------------------------------------------------------ どうも、競合してしまっているようなのですが、 OriginalPage内のロードイベントの書き方がまずいのでしょうか?? 申し訳ありませんが、どなたかご教授お願いしますm(_ _)m | ||||||||
|
投稿日時: 2005-11-01 18:14
OriginalPage の Page_Load を private にすれば良いですね。
| ||||||||
|
投稿日時: 2005-11-01 18:32
囚人さん、いつもお世話になってますm(_ _)m
本当ですね!! privateにすれば消えました!! 問題解決です! ありがとうございます、とても助かりました^^ | ||||||||
|
投稿日時: 2005-11-01 18:41
何故それで良いのかも考えてみて下さいねー。
何故、イベントハンドラが public でも private でも良いのか。 何故、public だと Shadow が要るのか。 | ||||||||
|
投稿日時: 2005-11-01 18:44
そうですね^^
原因がわからないと本当の解決とはいえませんしね! ご教授ありがとうございますm(_ _)m | ||||||||
|
投稿日時: 2005-11-01 18:57
イベントの使用方法のガイドライン
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconeventusageguidelines.asp このドキュメントの中の、イベントを発生させるためのOnXXX()メソッドの話の所にこんなことが書いてあります。(ちょっとはしょってます) イベントを発生させるには、protected仮想メソッドを使用します。 このメソッドの目的は、派生クラスでオーバーライドを使用してイベントを処理できるようにすることです。 開発者が派生クラスを作成する場合には、デリゲートよりもこのメソッドを使用した方が自然です。 メソッド名は、OnEventName (EventName は発生させるイベントの名前) という形式で付けます。 Page_Load()を作るよりもOnLoad()をオーバーライドの方がいいかもしれませんね。 | ||||||||
|
投稿日時: 2005-11-01 18:59
あれ? 自分の考えは仰らないんですか?
自ら隠すことにするか継承元で隠してしまうか、ですね。 Visual Basic 言語の概念 シャドウ そもそも、イベントの定義は別として、イベント ハンドラ自体は、 外に公開すべきものじゃないので、Private 固定ですよね。 イベントは概念的に "外" で起こすものじゃないですからね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-11-01 19:21
大賛成。でも Visual Studio が最初に用意してくれるコードは・・・。(くそぅ。下位互換性という奴ですか・・・)Init は OnInit() なのに。
私宛ですか? public にしても意味ないって気づいたらいいなぁと思いまして^^; Shadow は調べたら分かりますしね。 |