- PR -

クラスの参照ができていないのでしょうか?

投稿者投稿内容
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2008-01-23 13:22
VS2005 C#で作った、aspのあまりにも単純なプログラムなのに、なぜこれが動かないのかがわからず困っています。単純なので、コードをそのまま書きます。

コード:

//file1.cs
namespace testProgram
{
public partial class Default : Page
{
public void Page_Load(object sender, EventArgs e)
{ test(); }
}
}



コード:

//file2.cs(一郎さん指摘により修正しました)
namespace testProgram
{
public partial class Default : Page
{
public void test()
{ labelTest.Text = "123"; }
}
}




この2つのファイルでビルドした際には、エラーも警告も一切でませんが、実行すると、file1.cs側で
「コンパイル エラー メッセージ: CS0103: 名前 'test' は現在のコンテキスト内に存在しません。」
というエラーが表示されてしまいます。単純な原因なのかもしれませんが、ご回答いただけませんでしょうか。

_________________
◇◇◇ 社内SEを兼務する文系プログラマです。
◇◇◇ WinXP VisualStudio2005(C#メイン) MS・SQLServer とかを使っています。
◇◇◇ 周囲にプログラマがいないので、みなさんだけが頼りですヽ(`Д´;ノ

[ メッセージ編集済み 編集者: Wingard 編集日時 2008-01-23 14:57 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2008-01-23 14:14
引用:

Wingardさんの書き込み (2008-01-23 13:22) より:
コード:
//file2.cs
namespace testProgram
{
    public partial class Default : Page
    {
        public void Page_Load(object sender, EventArgs e)
        {
            public void test()
            { labelTest.Text = "123"; }
        }
    }
}




これは
コード:
//file2.cs
namespace testProgram
{
    public partial class Default : Page
    {

        public void test()
        { labelTest.Text = "123"; }
    }
}


の間違いでしょうか?
file1.csにもtestメソッドを書いてみてください。
エラーにならなければふたつのDefaultクラスは別のものってことです。例えば名前空間が違うとか、クラス名のつづりを一文字打ち間違っているとか。

file1.csとfile2.csは、それぞれ別のアセンブリを作るためのソースファイルってことはないですよね?
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2008-01-23 14:56
>一郎さん

失礼しました、その通りです。file2.csはご指摘の通りです。

名前空間については、どちらも一緒でした。ためしに1文字変えてみたら、コンパイル時にエラーがわんさかと出てきたので、これは間違いないと思います。

>file1.csとfile2.csは、それぞれ別のアセンブリを作るためのソースファイルってことはないですよね?

これも私の認識が間違っていなければ一緒のはずですが……。単純に、コードと変数と基幹をわけようとして、こういうエラーが出てきたので、質問させていただきました。ASPではなく普通のフォーム系のアプリケーションでしたら、同じようなやり方でできていましたので、なおさら混乱しています。

引き続きご回答いただければ幸いです。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-01-23 15:22
以下の手順を実行しました。

・VisualStudio2005で新規WebアプリケーションをC#で作成。
・Default.aspxの名前空間をWebApplication1からtestProgramへ変更。
 Default.aspxのクラス名を_DefaultからDefaultへ変更。
(aspxファイルとaspx.csファイルの両方とも修正)
・Default.aspxにLabelを置いて、IDをlabelTestへ変更。
・プロジェクトにfile2.csというクラスファイルを追加し、
 namespace {〜} の部分を提示されたコードに置き換える。
・Default.aspxのPage_Loadイベントにtest();の呼び出しを追加。

Default.aspxを実行したところ、123と(おそらく意図どおりに)表示されました。
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2008-01-23 15:38
>rainさん

うわーわざわざ試していただいてありがとうございます。ということは、ソース自体には特に問題なさそうですね……。ちょっとファイルを作り直して見ます。
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2008-01-23 15:56
ファイルを作り直してもだめでしたが、1つ気がついたことがあります。上記file1.csの、「public partial class Default : Page」の中のDefaultという文字が、他のと違って水色になっていませんでした。これがすごく怪しいのですが、他の適当な文字に変更してみても、やはり水色のままです……。

どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-01-23 16:09
Wingardさんは「Webサイト」プロジェクトで試してませんか?
rainさんが書いているように、「Webアプリケーション」プロジェクトだとうまくいくようです。

#「Webサイト」だとどうすればいいかなぁ。。。
 ちょっと解決できてない。
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2008-01-23 16:24
いえ、WEBアプリケーションだと思います……。「新規作成」>「プロジェクト」で、「ASP.NET WEBアプリケーション」というのを選んで作っています。

というか、「WEBサイトプロジェクト」というのは探してみましたが、作り方がそもそもわかりませんでした。

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