Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Słowo namespace
kluczowe służy do deklarowania zakresu zawierającego zestaw powiązanych obiektów. Przestrzeń nazw umożliwia organizowanie elementów kodu i tworzenie globalnie unikatowych typów.
namespace SampleNamespace
{
class SampleClass { }
interface ISampleInterface { }
struct SampleStruct { }
enum SampleEnum { a, b }
delegate void SampleDelegate(int i);
namespace Nested
{
class SampleClass2 { }
}
}
Deklaracje przestrzeni nazw o zakresie plików umożliwiają zadeklarowanie, że wszystkie typy w pliku znajdują się w jednej przestrzeni nazw. Deklaracje przestrzeni nazw o zakresie plików są dostępne w języku C# 10. Poniższy przykład jest podobny do poprzedniego przykładu, ale używa deklaracji przestrzeni nazw o zakresie pliku:
using System;
namespace SampleFileScopedNamespace;
class SampleClass { }
interface ISampleInterface { }
struct SampleStruct { }
enum SampleEnum { a, b }
delegate void SampleDelegate(int i);
Używanie instrukcji w przestrzeniach nazw o zakresie plików
W przypadku korzystania z przestrzeni nazw o zakresie plików umieszczanie instrukcji using
wpływa na ich zakres w pliku. Przestrzenie nazw o zakresie plików są niższe od równoważnej tradycyjnej deklaracji przestrzeni nazw, która kończy się nawiasem zamykającym na końcu pliku. To zachowanie określa, gdzie using
dyrektywy są stosowane w następujący sposób:
using
Jeśli instrukcje są umieszczane przed deklaracją przestrzeni nazw o zakresie pliku, są traktowane jako poza przestrzenią nazw i są interpretowane jako w pełni kwalifikowane przestrzenie nazw.- Jeśli instrukcje
using
są umieszczane po deklaracji przestrzeni nazw o zakresie pliku, są one objęte zakresem w samej przestrzeni nazw.
Na przykład:
// 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...
}
W powyższym przykładzie System
jest dostępny globalnie, ale System.Text
ma zastosowanie tylko w obrębie SampleNamespace
.
Powyższy przykład nie zawiera zagnieżdżonej przestrzeni nazw. Przestrzenie nazw o zakresie plików nie mogą zawierać dodatkowych deklaracji przestrzeni nazw. Nie można zadeklarować zagnieżdżonej przestrzeni nazw ani drugiej przestrzeni nazw o zakresie plików:
namespace SampleNamespace;
class AnotherSampleClass
{
public void AnotherSampleMethod()
{
System.Console.WriteLine(
"SampleMethod inside SampleNamespace");
}
}
namespace AnotherNamespace; // Not allowed!
namespace ANestedNamespace // Not allowed!
{
// declarations...
}
W przestrzeni nazw można zadeklarować zero lub więcej z następujących typów:
- class
- interface
- struct
- enum
- delegate
- zagnieżdżone przestrzenie nazw można zadeklarować z wyjątkiem deklaracji przestrzeni nazw o zakresie pliku
Kompilator dodaje domyślną przestrzeń nazw. Ta nienazwana przestrzeń nazw, czasami nazywana globalną przestrzenią nazw, znajduje się w każdym pliku. Zawiera deklaracje nieuwzględniane w zadeklarowanej przestrzeni nazw. Dowolny identyfikator w globalnej przestrzeni nazw jest dostępny do użycia w nazwanej przestrzeni nazw.
Przestrzenie nazw niejawnie mają dostęp publiczny. Aby zapoznać się z omówieniem modyfikatorów dostępu, które można przypisać do elementów w przestrzeni nazw, zobacz Modyfikatory dostępu.
Można zdefiniować przestrzeń nazw w co najmniej dwóch deklaracjach. Na przykład w poniższym przykładzie zdefiniowano dwie klasy w ramach MyCompany
przestrzeni nazw:
namespace MyCompany.Proj1
{
class MyClass
{
}
}
namespace MyCompany.Proj1
{
class MyClass1
{
}
}
W poniższym przykładzie pokazano, jak wywołać metodę statyczną w zagnieżdżonej przestrzeni nazw.
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
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz sekcję Przestrzenie nazw specyfikacji języka C#. Aby uzyskać więcej informacji na temat deklaracji przestrzeni nazw o zakresie plików, zobacz specyfikację funkcji.