Klíčové slovo 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ů. 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ů
Když použijete názvové prostory s rozsahem souboru, umístění příkazů using
ovlivňuje jejich platnost v rámci 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:
- Pokud jsou příkazy
using
umístěny před deklaraci oboru názvů s oborem souborů, považují se za mimo obor názvů a jsou interpretovány jako plně kvalifikované obory názvů. - Pokud jsou příkazy
using
umístěny za deklarací oboru názvů v rámci souboru, jsou součástí 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 je System
globálně přístupný, zatímco System.Text
platí pouze v rámci SampleNamespace
.
Předchozí příklad neobsahuje vnořený obor názvů. Názvové prostory omezené na soubor nemohou obsahovat více deklarací názvového prostoru. Nelze deklarovat vnořený obor názvů ani druhý obor názvů na úrovni souboru.
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.