none
Webアプリケーションに追加したクラスのネームスペースについて RRS feed

  • 質問

  • winxp+sp2

    vs2005 c#

     

    Windowsアプリケーションやクラスライブラリに追加したクラスにはデフォルトでnamespaceブロックが書かれていますが、WebアプリケーションのApp_Codeフォルダに追加したクラスファイルにはnamespaceがありません。

    これには何か理由があるのでしょうか?namespaceを自分で記述することもできるようですが、デフォルトで書かれていないのはnamespaceを書かない方が都合がよいのでしょうか?

    知っている方がいましたら宜しくお願いします。

    以上

    2006年12月1日 7:00

回答

  • VS2005で導入されたASP.NET 2.0のコンパイルモデルでは、ファイルが属するフォルダを利用して、それぞれ複数のコンポーネントとしてコンパイルされます。同じフォルダに同じクラス名は存在できませんが、違うフォルダ同士であれば存在することができます。このことから、コンパイル時に、自動的にクラス名にフォルダ名が付加されているのではないかと思います。これは、フォルダ内にWebページを追加した場合、そのクラス名が、自動的にフォルダ名_クラス名のような名前が付けられることから想像できます。
    以上の仕組みのおかげで、名前空間が必要ないのだと思います。ちなみに、名前空間が存在しないわけではなく、同じフォルダに同名のクラスを記述すると、

    「エラー 1 名前空間 '<グローバル名前空間>' に 'detailsView3' の定義が既に含まれています。 E:\WebSites\WebSite1\新しいフォルダ2\testes.aspx.cs 25 14 E:\WebSites\WebSite1\

    というエラーが出ますので、'<グローバル名前空間>'に属しているようですね。そりゃそうでしょうが。

    さて、VS2005で導入されたコンパイルモデルには賛否両論があり、VS2003の頃のサイト全体を1つのアセンブリとしてコンパイルするモデルの復活が求められました。結果、Web Application Projectとして、英語版のVS2005には追加することができるようになっています。日本語版では、VS2005 SP1で実現されるようです。これが実現されれば、ASP.NET1.1からASP.NET2.0への移行が進むことが期待されています。

    2006年12月1日 9:08
    モデレータ
  • WebアプリケーションにはNamespaceが無いわけではなく、追加したクラスファイルにデフォルトでNamespaceが無いのはフォルダ階層がその代わりをしているためあえてMSがなくしたという感じでしょうか。

    開発者が必要と考えれば、クラスにNamespaceを記述すればいいだけであって、そこに記述する、しないで大きな機能差が生じるわけでは無いという事ですね。

    回答ありがとうございました。

    2006年12月1日 10:12

すべての返信

  • 名前空間の問題ですから、個人の自由 (というよりポリシに従う) で良いと思います。

    2006年12月1日 8:11
  • VS2005で導入されたASP.NET 2.0のコンパイルモデルでは、ファイルが属するフォルダを利用して、それぞれ複数のコンポーネントとしてコンパイルされます。同じフォルダに同じクラス名は存在できませんが、違うフォルダ同士であれば存在することができます。このことから、コンパイル時に、自動的にクラス名にフォルダ名が付加されているのではないかと思います。これは、フォルダ内にWebページを追加した場合、そのクラス名が、自動的にフォルダ名_クラス名のような名前が付けられることから想像できます。
    以上の仕組みのおかげで、名前空間が必要ないのだと思います。ちなみに、名前空間が存在しないわけではなく、同じフォルダに同名のクラスを記述すると、

    「エラー 1 名前空間 '<グローバル名前空間>' に 'detailsView3' の定義が既に含まれています。 E:\WebSites\WebSite1\新しいフォルダ2\testes.aspx.cs 25 14 E:\WebSites\WebSite1\

    というエラーが出ますので、'<グローバル名前空間>'に属しているようですね。そりゃそうでしょうが。

    さて、VS2005で導入されたコンパイルモデルには賛否両論があり、VS2003の頃のサイト全体を1つのアセンブリとしてコンパイルするモデルの復活が求められました。結果、Web Application Projectとして、英語版のVS2005には追加することができるようになっています。日本語版では、VS2005 SP1で実現されるようです。これが実現されれば、ASP.NET1.1からASP.NET2.0への移行が進むことが期待されています。

    2006年12月1日 9:08
    モデレータ
  • WebアプリケーションにはNamespaceが無いわけではなく、追加したクラスファイルにデフォルトでNamespaceが無いのはフォルダ階層がその代わりをしているためあえてMSがなくしたという感じでしょうか。

    開発者が必要と考えれば、クラスにNamespaceを記述すればいいだけであって、そこに記述する、しないで大きな機能差が生じるわけでは無いという事ですね。

    回答ありがとうございました。

    2006年12月1日 10:12
  • はい。そのように私は考えています。実際、namespaceを使えないわけではなく、使うことによって、同じフォルダに同じクラス名でクラスを作成することができます。

    一つ書き忘れていたのですが、Web Application Projectを持ち出したのは、こちらはVS2003のスタイルですので、namespaceが最初から記述されているようです。

    2006年12月2日 0:05
    モデレータ