Namnrymder i C#
↑Snabböversikt
Section titled “Snabböversikt”En namnrymd samlar relaterade typer under ett namn. Den motverkar namnkonflikter, men är varken en katalog, en säkerhetsgräns eller en kompilerad assembly. using gör det enklare att skriva typnamn och kopierar inte in källkod.
Varför finns namnrymder?
Section titled “Varför finns namnrymder?”Två bibliotek kan ha varsin klass som heter Logger. HCSTech.Logging.Logger och Vendor.Diagnostics.Logger är ändå olika typer tack vare sina fullständiga namn. Med using kan du ofta skriva bara Logger, men om namnet blir tvetydigt behöver du ett alias eller det fullständiga namnet.
namespace HCSTech.Logging;
public sealed class Logger{ public void Write(string message) => Console.WriteLine(message);}#include <iostream>namespace HCSTech::Logging { struct Logger { void write(const char* text) { std::cout << text << '\n'; } };}Bygg ett bra system
Section titled “Bygg ett bra system”- Välj ett tydligt rotnamn, exempelvis
HCSTech.Gameplay. - Gruppera efter ansvar, som
Gameplay.InventoryellerGameplay.Combat. - Undvik alltför långa namn. Den som använder en klass ska kunna hitta den.
- Var försiktig när du döper om. Ändrade namnrymder kan påverka referenser och i vissa fall serialiserade typnamn.
Två sätt att skriva namespace
Section titled “Två sätt att skriva namespace”En filbaserad deklaration, namespace MyApp.Core;, gäller för hela filen och är lätt att läsa. Den äldre blockformen, namespace MyApp.Core { ... }, ger samma namnrymd men med ett omslutande block. Välj en konsekvent stil.
Alias och using
Section titled “Alias och using”Med using FileLogger = HCSTech.Logging.Logger; kan du använda ett lokalt namn för en viss typ. Det är användbart när två bibliotek definierar samma korta namn. Alias ändrar inte klassens verkliga namn.
I Unity kan namnrymder ordna spelkod och editorverktyg, men själva kompileringsgränserna styrs av assembly definitions.
