namespace
Klíčové namespace
slovo slouží k deklaraci oboru, který obsahuje sadu souvisejících objektů. Obor názvů můžete použít k uspořádání prvků kódu a k vytváření globálně jedinečných typů.
namespace SampleNamespace
{
class SampleClass { }
interface ISampleInterface { }
struct SampleStruct { }
enum SampleEnum { a, b }
delegate void SampleDelegate(int i);
namespace Nested
{
class SampleClass2 { }
}
}
Deklarace oboru názvů s oborem souborů umožňují deklarovat, že všechny typy v souboru jsou v jednom oboru názvů. Deklarace oboru názvů s vymezeným oborem souborů jsou k dispozici v jazyce C# 10. Následující příklad je podobný předchozímu příkladu, ale používá deklaraci oboru názvů s oborem souboru:
using System;
namespace SampleFileScopedNamespace;
class SampleClass { }
interface ISampleInterface { }
struct SampleStruct { }
enum SampleEnum { a, b }
delegate void SampleDelegate(int i);
Using – příkazy v oborech názvů s vymezeným oborem souborů
Při použití oborů názvů s oborem souborů ovlivní umístění using
příkazů jejich rozsah v souboru. Obory názvů s oborem souborů jsou nižší na ekvivalentní tradiční deklaraci oboru názvů, která končí pravou závorkou na konci souboru. Toto chování určuje, kde using
se direktivy použijí takto:
using
Pokud jsou příkazy umístěny před deklaraci oboru názvů v oboru souborů, jsou považovány za mimo obor názvů a jsou interpretovány jako plně kvalifikované obory názvů.using
Pokud jsou příkazy umístěny za deklaraci oboru názvů s oborem souborů, jsou vymezeny v rámci samotného oboru názvů.
Příklad:
// 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...
}
V předchozím příkladu System
je globálně přístupný, zatímco System.Text
platí pouze v rámci SampleNamespace
.
Předchozí příklad neobsahuje vnořený obor názvů. Obory názvů s oborem souborů nemůžou obsahovat další deklarace oboru názvů. Nelze deklarovat vnořený obor názvů nebo druhý obor názvů s oborem souborů:
namespace SampleNamespace;
class AnotherSampleClass
{
public void AnotherSampleMethod()
{
System.Console.WriteLine(
"SampleMethod inside SampleNamespace");
}
}
namespace AnotherNamespace; // Not allowed!
namespace ANestedNamespace // Not allowed!
{
// declarations...
}
V rámci oboru názvů můžete deklarovat nula nebo více z následujících typů:
- class
- interface
- struct
- enum
- delegate
- Vnořené obory názvů lze deklarovat s výjimkou deklarací oboru názvů v oboru souborů.
Kompilátor přidá výchozí obor názvů. Tento nepojmenovaný obor názvů, někdy označovaný jako globální obor názvů, se nachází v každém souboru. Obsahuje deklarace, které nejsou zahrnuty do deklarovaného oboru názvů. Jakýkoli identifikátor v globálním oboru názvů je k dispozici pro použití v pojmenovaném oboru názvů.
Obory názvů mají implicitně veřejný přístup. Diskuzi o modifikátorech přístupu, které můžete přiřadit k prvkům v oboru názvů, najdete v tématu Modifikátory accessu.
Obor názvů je možné definovat ve dvou nebo více deklaracích. Následující příklad například definuje dvě třídy jako součást MyCompany
oboru názvů:
namespace MyCompany.Proj1
{
class MyClass
{
}
}
namespace MyCompany.Proj1
{
class MyClass1
{
}
}
Následující příklad ukazuje, jak volat statickou metodu v vnořeném oboru názvů.
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
specifikace jazyka C#
Další informace najdete v části Obory názvů specifikace jazyka C#. Další informace o deklaracích oborů názvů s vymezeným oborem souborů najdete ve specifikaci funkce.