Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Návod
Začínáte s vývojem softwaru? Začněte nejprve kurzy Začínáme . Když píšete své první programy, zavádějí obory názvů a using direktivy.
Máte zkušenosti v jiném jazyce? Jmenné prostory v jazyce C# fungují podobně jako balíčky v Javě nebo moduly v Pythonu. Přeskočte na syntaxi, kterou potřebujete.
Deklarace oboru názvů a using direktivy jsou související jazykové funkce. Deklarace oboru názvů umístí typy do uspořádané struktury. Obor názvů seskupuje související typy a zabraňuje kolizím názvů. Direktiva using umožňuje vašemu programu používat tyto typy podle jejich jednoduchých názvů. Při každém použití nemusíte uvádět úplnou cestu oboru názvů.
Obory názvů jste už použili v každém programu jazyka C#, který jste napsali. Každý typ .NET patří do oboru názvů a každá using direktiva v horní části souboru odkazuje na jeden. Například Console a Math patří do System oboru názvů, takže jejich plně kvalifikované názvy jsou System.Console a System.Math. Typy kolekcí jako List<T> a Dictionary<TKey, TValue> patří do System.Collections.Generic. Jedna using direktiva pro některý z těchto oborů názvů umožňuje odkazovat na všechny jeho typy pomocí jejich jednoduchých názvů. Píšete List<T> místo System.Collections.Generic.List<T> všude, kde ho používáte.
Tento článek obsahuje další informace o tom, jak fungují obory názvů a using direktivy, a ukazuje příklady vzorů, se kterými jste se už v knihovnách .NET setkali.
Jmenný prostor obsahuje typy. Každý typ .NET patří do oboru názvů. Představte si System.Threading.Tasks.Tasknapříklad: typ Task patří do System.Threading.Tasks oboru názvů.
Je vhodné seskupit související nebo podobné typy ve stejném oboru názvů a to dělá .NET s typy, které poskytuje. Obor System.Collections.Generic názvů obsahuje typy související s kolekcí a System.IO obor názvů obsahuje typy související se čtením a zápisem souborů, adresářů a dat. Obor System názvů obsahuje základní typy, jako je Math, DateTimea Console.
Následující příklad ukazuje, jak obory názvů spolupracují s using direktivami v typickém souboru jazyka C#:
using System.Globalization;
namespace MyApp.Services;
class Greeter
{
public string Greet(string name)
{
var culture = CultureInfo.CurrentCulture;
return $"Hello, {name}! Culture: {culture.Name}";
}
}
V předchozím příkladu direktiva using znamená, že můžete použít System.Globalization.CultureInfo pod názvem CultureInfo bez nutnosti zadání plného názvu System.Globalization.CultureInfo. Direktiva namespace deklaruje, že Greeter třída je součástí MyApp.Services oboru názvů. Jeho plně kvalifikovaný název je MyApp.Services.Greeter.
Deklarace jmenného prostoru
Deklarace oboru názvů přiřadí vaše typy pojmenované skupině. Každý typ, který napíšete, by měl patřit do oboru názvů. Název oboru názvů obvykle zrcadlí strukturu složek vašeho projektu. Například typy ve Services/Payments složce často patří do MyApp.Services.Payments oboru názvů.
Jmenné prostory používají . operátor k vyjádření hierarchie, například System.Collections.Generic. Názvy oborů názvů musí být platné názvy identifikátorů jazyka C#.
Prostor jmen pro soubory
Syntaxi s oborem souborů použijte, pokud všechny typy v souboru patří do stejného oboru názvů. Za deklaraci oboru názvů přidejte středník a vztahuje se na celý soubor. Nepotřebujete další složené závorky ani odsazení:
namespace MyApp.Models;
class Customer
{
public required string Name { get; init; }
public string? Email { get; init; }
public override string ToString() => $"{Name} ({Email ?? "no email"})";
}
Jmenné prostory omezené na soubory snižují vnoření a usnadňují čtení souborů. Můžete mít pouze jednu deklaraci oboru názvů na soubor.
Návod
Používejte obory názvů definované souborem v novém kódu. Tento styl doporučuje většina šablon .NET a analyzátorů kódu.
Jmenné prostory s rozsahem na úrovni bloku
Syntaxi s oborem bloku použijte, pokud potřebujete deklarovat více než jeden obor názvů ve stejném souboru. Tento styl přidá další úroveň odsazení.
Důležité
Považuje se za chybný postup deklarování více než jednoho oboru názvů ve stejném souboru. Nejběžnějším scénářem je použití oborů názvů na úrovni souboru.
Následující úsek kódu je příkladem oboru názvů omezeného na blok:
namespace MyApp.Models
{
class Product
{
public required string Name { get; init; }
public decimal Price { get; init; }
public override string ToString() => $"{Name}: {Price:C}";
}
}
Použití direktiv
Bez direktivy musíte odkazovat na každý typ podle jeho plně kvalifikovaného názvu, což znamená úplnou cestu oboru názvů plus název typu.
static void ShowFullyQualified()
{
// Without a using directive, use the fully qualified name:
System.Console.WriteLine("Hello from fully qualified name!");
}
Direktiva using v horní části souboru importuje obor názvů, takže jeho typy můžete použít podle jejich jednoduchých názvů:
static void ShowShortName()
{
// With 'using System;' (or implicit usings enabled), use the short name:
Console.WriteLine("Hello from short name!");
}
Další informace najdete v direktivěusing.
Globální direktivy using
Pokud do každého souboru napíšete stejné using direktivy, globální direktivy using umožňují deklarovat je jednou pro celý projekt. Umístěte je do libovolného souboru. Mnoho týmů vytvoří vyhrazený GlobalUsings.cs soubor:
global using System.Text;
global using System.Text.Json;
Po deklarování globálního použití může každý soubor v projektu odkazovat na typy z tohoto oboru názvů pomocí jednoduchých názvů bez další using direktivy.
Implicitní použití
Balíček .NET SDK automaticky generuje globální direktivy using pro nejběžnější jmenné prostory na základě typu vašeho projektu. Povolte implicitní použití nastavením <ImplicitUsings>enable</ImplicitUsings> v souboru projektu. Například projekt konzolové aplikace automaticky importuje System, System.Collections.Generic, System.IO, System.Linq, System.Threading a System.Threading.Tasks. Aktuální sada SDK umožňuje ImplicitUsings při vytváření nového projektu pomocí dotnet new.
Pro více informací viz Implicitní použití direktiv.
Statické direktivy použití
Direktiva static using importuje statické členy typu, abyste je mohli volat bez předpony názvu typu:
using static System.Math;
namespace MyApp.Utilities;
class CircleCalculator
{
public static double CalculateArea(double radius) => PI * Pow(radius, 2);
public static double CalculateCircumference(double radius) => 2 * PI * radius;
}
Statické použití funguje dobře pro třídy nástrojů, jako je Math a Console které často voláte.
Aliasy typů a jmenných prostorů
Alias using vytvoří zkratkový název pro typ nebo obor názvů. Aliasy jsou užitečné pro dlouhé obecné typy, řešení konfliktů názvů a zlepšení čitelnosti:
using CustomerList = System.Collections.Generic.List<MyApp.Models.Customer>;
namespace MyApp.Services;
class CustomerService
{
public CustomerList GetTopCustomers()
{
CustomerList customers = [new() { Name = "Alice" }, new() { Name = "Bob" }];
return customers;
}
}
Od verze C# 12 můžete aliasovat libovolný typ, včetně n-tic a typů ukazatelů.
using Point = (double X, double Y);
namespace MyApp.Geometry;
class Shape
{
public static double Distance(Point a, Point b)
{
var dx = a.X - b.X;
var dy = a.Y - b.Y;
return Math.Sqrt(dx * dx + dy * dy);
}
}
V pokročilejších scénářích, kdy dvě sestavení definují stejný plně kvalifikovaný název typu, použijte externí alias k odstranění nejednoznačnosti mezi nimi.