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:
- osztály
- interfész
- Struct
- enumerálás
- képviselő
- a beágyazott névterek deklarálhatók, kivéve a fájlhatókörű névtér-deklarációkat
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.