Nyckelordet namespace
Nyckelordet namespace
används för att deklarera ett omfång som innehåller en uppsättning relaterade objekt. Du kan använda ett namnområde för att organisera kodelement och skapa globalt unika typer.
namespace SampleNamespace
{
class SampleClass { }
interface ISampleInterface { }
struct SampleStruct { }
enum SampleEnum { a, b }
delegate void SampleDelegate(int i);
namespace Nested
{
class SampleClass2 { }
}
}
Med namnområdesdeklarationer med filomfattning kan du deklarera att alla typer i en fil finns i ett enda namnområde. Följande exempel liknar föregående exempel, men använder en deklaration för filomfattningsnamnområde:
using System;
namespace SampleFileScopedNamespace;
class SampleClass { }
interface ISampleInterface { }
struct SampleStruct { }
enum SampleEnum { a, b }
delegate void SampleDelegate(int i);
Använda instruktioner i filomfattningsnamnområden
När du använder filomfattande namnområdenpåverkar placeringen av using
-satser deras omfång i filen. Filomfattande namnområden lägre än motsvarande traditionella namnområdesdeklaration som slutar med en avslutande hakparentes i slutet av filen. Det här beteendet avgör var using
direktiv tillämpas på följande sätt:
- När
using
-uttrycken placeras före den filomfattande namnområdesdeklarationen behandlas de som om de vore utanför namnområdet och tolkas som fullständigt kvalificerade namnutrymmen. - Om
using
-uttrycken placeras efter den filomfattande namnområdesdeklarationen är de avgränsade inom själva namnområdet.
Till exempel:
// 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...
}
I föregående exempel är System
globalt tillgängligt, medan System.Text
endast gäller inom SampleNamespace
.
Föregående exempel innehåller inte ett kapslat namnområde. Filomfattningsnamnområden kan inte innehålla fler namnområdesdeklarationer. Du kan inte deklarera ett kapslat namnområde eller ett andra filomfattningsnamnområde:
namespace SampleNamespace;
class AnotherSampleClass
{
public void AnotherSampleMethod()
{
System.Console.WriteLine(
"SampleMethod inside SampleNamespace");
}
}
namespace AnotherNamespace; // Not allowed!
namespace ANestedNamespace // Not allowed!
{
// declarations...
}
I ett namnområde kan du deklarera noll eller fler av följande typer:
- klass
- gränssnitt
- Struct
- uppräkning
- delegera
- kapslade namnområden kan deklareras förutom i namnområdesdeklarationer med filomfattning
Kompilatorn lägger till ett standardnamnområde. Det här namnlösa namnområdet, som ibland kallas globalt namnområde, finns i varje fil. Den innehåller deklarationer som inte ingår i ett deklarerat namnområde. Alla identifierare i det globala namnområdet är tillgängliga för användning i ett namngivet namnområde.
Namnområden har implicit offentlig åtkomst. En diskussion om de åtkomstmodifierare som du kan tilldela till element i ett namnområde finns i Åtkomstmodifierare.
Det går att definiera ett namnområde i två eller flera deklarationer. I följande exempel definieras till exempel två klasser som en del av MyCompany
namnområdet:
namespace MyCompany.Proj1
{
class MyClass
{
}
}
namespace MyCompany.Proj1
{
class MyClass1
{
}
}
I följande exempel visas hur du anropar en statisk metod i ett kapslat namnområde.
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
Språkspecifikation för C#
Mer information finns i avsnittet Namnområden i C#-språkspecifikationen. Mer information om namnområdesdeklarationer med filomfattning finns i funktionsspecifikationen.