- PR -

[ASP.NET]Page継承クラスのイベントについて

投稿者投稿内容
新人S
ベテラン
会議室デビュー日: 2005/10/12
投稿数: 74
投稿日時: 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/08/13
投稿数: 1019
投稿日時: 2005-11-01 18:14
OriginalPage の Page_Load を private にすれば良いですね。
新人S
ベテラン
会議室デビュー日: 2005/10/12
投稿数: 74
投稿日時: 2005-11-01 18:32
囚人さん、いつもお世話になってますm(_ _)m

本当ですね!!
privateにすれば消えました!!
問題解決です!

ありがとうございます、とても助かりました^^
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-11-01 18:41
何故それで良いのかも考えてみて下さいねー。
何故、イベントハンドラが public でも private でも良いのか。
何故、public だと Shadow が要るのか。

新人S
ベテラン
会議室デビュー日: 2005/10/12
投稿数: 74
投稿日時: 2005-11-01 18:44
そうですね^^

原因がわからないと本当の解決とはいえませんしね!
ご教授ありがとうございますm(_ _)m
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 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()をオーバーライドの方がいいかもしれませんね。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-01 18:59
あれ? 自分の考えは仰らないんですか?
自ら隠すことにするか継承元で隠してしまうか、ですね。

  Visual Basic 言語の概念 シャドウ

そもそも、イベントの定義は別として、イベント ハンドラ自体は、
外に公開すべきものじゃないので、Private 固定ですよね。
イベントは概念的に "外" で起こすものじゃないですからね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-11-01 19:21
引用:

Page_Load()を作るよりもOnLoad()をオーバーライドの方がいいかもしれませんね。


大賛成。でも Visual Studio が最初に用意してくれるコードは・・・。(くそぅ。下位互換性という奴ですか・・・)Init は OnInit() なのに。

引用:

あれ? 自分の考えは仰らないんですか?


私宛ですか?
public にしても意味ないって気づいたらいいなぁと思いまして^^;
Shadow は調べたら分かりますしね。

スキルアップ/キャリアアップ(JOB@IT)