- PR -

ASP.NET2.0における継承

1
投稿者投稿内容
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 2007-01-10 14:45
ASP.NET2.0(Visual Web Developer 2005 Express Edition)でWEBアプリケーションの開発をしています。

VB.net 2003での開発時は同じプロジェクト内にあれば、基本クラスを継承する際に単純にコードビハインドファイルのInheritsの後ろにクラス名を記述すると継承できていたのですが、2005では型の定義エラーとなります。PartialをPublicにしても結果は同じでしたが、別途コンパイル等をしないと継承元として使用できないのでしょうか?
基本的なことですが、よろしくお願いします。

全ての基本となるページ
Partial Class BaseForm
Inherits System.Web.UI.Page

継承するページ
Partial Class Calender
Inherits BaseForm
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-10 14:47
引用:

ゆっきーさんの書き込み (2007-01-10 14:45) より:

2005では型の定義エラーとなります。


Partial で分割されたクラス側に、すでに別の型が Inherits されているのではないでしょうか。

# 誤爆した... orz
# ちゃんと読めよ > わたし

[ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2007-01-10 15:18 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-01-10 15:02
1.1までと2.0ではこのあたりの仕組みが変わっています。
2.0ではaspxファイルから自動生成されるクラスの中でPageクラスを継承しているため、
その一部であるコードビハインド側のパーシャル部分に別の継承元を指定しても
うまく動かなくなっています。

aspxファイルの@PageディレクティブのCodeFileBaseClass属性で継承元のクラスを
指定すればよいと思います。

ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 2007-01-10 15:17
じゃんぬねっとさん、どっとねっとふぁんさん回答ありがとうございます。

どっとねっとふぁんさんの言われたとおり、@PageディレクティブのCodeFileBaseClass属性に継承元クラスを指定したのですが、
「型 'BaseForm' を読み込めませんでした。」となりうまく読み込めませんでした。
他に指定があるのでしょうか?

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Form1.aspx.vb" Inherits="Form" CodeFileBaseClass="BaseForm" %>
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-01-10 15:43
BaseFormのクラスは作成済みなんですよね?
BaseFormクラスのソースファイルはApp_Codeフォルダの下にありますか?
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 2007-01-10 16:16
App_Codeフォルダの下には入れていませんが、BaseFormのクラスは作成済です。App_Codeフォルダの下へ持っていくとデザイナでrunat=serverになっているコントロールが認識できなかったので・・・。

Microsoftのページでそれらしい記述を見つけたので、Reference Pageなどを入れてみましたが、エラーが解消されません。

http://www.microsoft.com/japan/msdn/net/aspnet/conversionissuesasp_net.aspx
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-01-10 16:37
クラスなどのソースコードはApp_Codeフォルダの下に置かないと自動ではコンパイル
してくれません。
あらかじめコンパイルしたdllファイルはbinフォルダの下に配置する必要があります。

#ただ、こういったクラスをあらかじめコンパイルするのは面倒じゃないかな。

> App_Codeフォルダの下へ持っていくとデザイナでrunat=serverになっているコントロールが認識できなかったので・・・。

認識できない、というのはどういうことでしょうか?
ソース(またはその書き方)に問題がある可能性があります。
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 2007-01-11 09:20
階層の指定ミスがあったようで、@Reference Pageの追加で解決しました。
いろいろとアドバイスありがとうございました。

<基本となるページ>
・デザイナ
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="BaseForm.aspx.vb" Inherits="BaseForm" %>
・コード
Partial Public Class BaseForm
Inherits System.Web.UI.Page

<継承ページ>
・デザイナ
<%@ Reference Page="BaseForm.aspx" %>
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Form1.aspx.vb" Inherits="Form1" CodeFileBaseClass="BaseForm" %>
・コード
Partial Class Form1
Inherits BaseForm

1

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