3

さて、とがSystemありSystem.Webます。これが示唆する構造は次のとおりです。

namespace System
{
    // all of the outer namespace members

    namespace Web
    {
        // all of the inner members
    }
}

また、名前空間が別の名前空間内にネストされている場合、親/外部名前空間のみusingを含むディレクティブがあると、子/ネストされた名前空間が自動的に取り込まれませんか?言い換えると:

using System;

public class Example
{
    public Example()
    {
        context1 = new HttpContext(); // won't work

        context2 = new System.Web.HttpContext(); // will work
    }
}

私が実際にこれを正しく理解しているかどうかを確認しようとしています。

4

5 に答える 5

3

System.Web は次のように宣言されています。

namespace System.Web
{
    public class HttpContext {}
}

ただし、子名前空間を実際に宣言することは可能です。

namespace System
{
    namespace Web
    {
        public class HttpContext {}
    }
}

私はこのようなものを見たことがありませんが、構文はそれを可能にし、効果は同じです. どちらの場合も、の名前空間はHttpContextですSystem.Web.HttpContext

2 番目の例でもusing System;、子の名前空間はインポートされず、その名前空間で定義された型のみがインポートされます。

于 2012-12-05T15:58:47.023 に答える
2

名前空間をネストすることができusing、ディレクティブは、参照している特定の名前空間内で定義されたメンバーへのアクセスのみを許可します。

あなたの例から:

namespace System
{
    // all of the outer namespace members

    namespace Web
    {
        // all of the inner members
    }
}

参照Systemすると外側の名前空間メンバーへのアクセスが許可され、参照System.Webするとすべての内側の名前空間メンバーへのアクセスが許可されます。

しかし、これは一般的ではなく、通常、名前空間はファイル内で 1 回だけ定義されます。通常、ドット表記はフォルダーまたはプロジェクト構造に従うため、ネストされたファイルは次のようになります。

ウェブアプリケーション
    - モデル
        - MyModel.cs
    - コントローラー
        - MyController.cs

との名前空間を使用する場合がWebApplication.ModelsありWebApplication.Controllersます。

名前空間を入れ子にしたいという頭の中で素晴らしい例を思いつくことはできませんが、それには十分な理由があるかもしれません。ただし、私の意見では、それは規則の例外と見なされます。

于 2012-12-05T16:08:39.223 に答える
1

はい、using ディレクティブは、その名前空間で宣言された型のみを名前空間修飾子なしで使用できるようにします。ネストされた名前空間は自動的には含まれません。

于 2012-12-05T16:01:41.720 に答える
1

ダニエルが言ったように、System.Web個別に宣言されていません。SystemSystem.Webは、技術的に関連のない 2 つの別個の名前空間です。

のコード例が機能しないのはそのためですnew HttpContext()-名前空間にまったくないためです。HttpContextSystem

于 2012-12-05T16:02:03.257 に答える
1

これは、複合名前空間に関する一般的な混乱です。それについてのMicrosoftのすばらしい記事があります:http://msdn.microsoft.com/en-us/library/ms973231.aspx

于 2012-12-05T16:04:12.290 に答える