Megosztás a következőn keresztül:


névtér

A namespace kulcsszó egy kapcsolódó objektumokat tartalmazó hatókör deklarálásához használható. Egy névtér használatával rendszerezheti a kódelemeket, és globálisan egyedi típusokat hozhat létre.

namespace SampleNamespace
{
    class SampleClass { }

    interface ISampleInterface { }

    struct SampleStruct { }

    enum SampleEnum { a, b }

    delegate void SampleDelegate(int i);

    namespace Nested
    {
        class SampleClass2 { }
    }
}

A fájlhatókörrel rendelkező névtér-deklarációk lehetővé teszik annak deklarálását , hogy a fájl összes típusa egyetlen névtérben található. A fájlhatókörrel rendelkező névtér-deklarációk a C# 10-ben érhetők el. Az alábbi példa hasonló az előző példához, de fájlhatókörű névtérdeklarációt használ:

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

Utasítások használata fájlhatókörű névterekben

Fájlhatókörű névterek használatakor az utasítások elhelyezése using hatással van a hatókörükre a fájlban. A fájlhatókörű névterek alacsonyabbak a hagyományos névtér-deklarációnál, amely a fájl végén záró zárójeltel végződik. Ez a viselkedés az alábbiak szerint határozza meg using az irányelvek alkalmazását:

  • Ha az utasítások a using fájlhatókörrel rendelkező névtér deklarációja elé kerülnek, a rendszer a névtéren kívül esőként kezeli őket, és teljes névtérként értelmezi őket.
  • Ha az utasítások a using fájlhatókörű névtér deklarációja után kerülnek elhelyezésre, azokat a névtéren belül kell megadni.

Példa:

// This using is outside the namespace scope, so it applies globally
using System;

namespace SampleNamespace; // File-scoped namespace declaration

// This using is inside the namespace scope
using System.Text;

public class SampleClass
{
    // Class members...
}

A fenti példában globálisan elérhető, System míg System.Text csak a rendszeren belül SampleNamespace.

Az előző példa nem tartalmaz beágyazott névteret. A fájl hatókörébe tartozó névterek nem tartalmazhatnak további névtér-deklarációkat. Beágyazott névteret vagy második fájlhatókörű névteret nem deklarálhat:

namespace SampleNamespace;

class AnotherSampleClass
{
    public void AnotherSampleMethod()
    {
        System.Console.WriteLine(
            "SampleMethod inside SampleNamespace");
    }
}

namespace AnotherNamespace; // Not allowed!

namespace ANestedNamespace // Not allowed!
{
   // declarations...
}

Egy névtéren belül a következő típusok közül nullát vagy többet deklarálhat:

A fordító hozzáad egy alapértelmezett névteret. Ez a névtelen névtér( más néven globális névtér) minden fájlban megtalálható. Deklarált névtérben nem szereplő deklarációkat tartalmaz. A globális névtér bármely azonosítója elérhető névtérben való használatra.

A névterek implicit módon nyilvános hozzáféréssel rendelkeznek. A névtér elemeihez hozzárendelhető hozzáférési módosítókról az Access Modifiers című témakörben olvashat bővebben.

Egy névtér definiálható két vagy több deklarációban. Az alábbi példa például két osztályt határoz meg a MyCompany névtér részeként:

namespace MyCompany.Proj1
{
    class MyClass
    {
    }
}

namespace MyCompany.Proj1
{
    class MyClass1
    {
    }
}

Az alábbi példa bemutatja, hogyan hívhat meg statikus metódust beágyazott névtérben.

namespace SomeNameSpace
{
    public class MyClass
    {
        static void Main()
        {
            Nested.NestedNameSpaceClass.SayHello();
        }
    }

    // a nested namespace
    namespace Nested
    {
        public class NestedNameSpaceClass
        {
            public static void SayHello()
            {
                Console.WriteLine("Hello");
            }
        }
    }
}
// Output: Hello

C# nyelvspecifikáció

További információ: A C# nyelv specifikációjának Névterek szakasza. A fájlhatókörű névtér-deklarációkkal kapcsolatos további információkért tekintse meg a szolgáltatás specifikációját.

Lásd még