Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Jótanács
Új szoftverfejlesztés? Először az Első lépések oktatóanyagokkal kezdje. Az első programok írásakor névtereket és using irányelveket vezetnek be.
Tapasztalt egy másik nyelven? A C# névterei a Java-csomagokhoz vagy a Python-modulokhoz hasonlóan működnek. Haladjon előre a szükséges szintaxishoz.
A névtér deklarációi és using irányelvei a kapcsolódó nyelvi funkciók. A névtér-deklaráció rendszerezett struktúrába helyezi a típusokat. A névtér csoportosítja a kapcsolódó típusokat, és megakadályozza az elnevezési ütközéseket. Egy using irányelv lehetővé teszi, hogy a program egyszerű nevük alapján használja ezeket a típusokat. Nem kell minden használatnál megadnia a teljes névtér elérési útját.
Már használt névtereket minden C#-programban, amelyet írt. Minden .NET-típus egy névtérhez tartozik, és a fájl tetején lévő összes using direktíva egyre hivatkozik. Például a Console és Math a System névtérhez tartozik, így a teljesen kvalifikált nevük a System.Console és a System.Math. A List<T> és Dictionary<TKey, TValue> gyűjteménytípusok System.Collections.Generic-hoz tartoznak.
using Ezeknek a névtereknek egyetlen irányelve lehetővé teszi, hogy egyszerű nevük alapján hivatkozzon az összes típusára. Mindenhol List<T>-t ír, ahol System.Collections.Generic.List<T>-t használ.
Ez a cikk további hátteret biztosít a névterek és using irányelvek működéséhez, és példákat mutat be a .NET-kódtárakban már tapasztalt mintákra.
A névtér típusokat tartalmaz. Minden .NET-típus egy névtérhez tartozik. Vegyük például a System.Threading.Tasks.Taskkövetkezőt: a típus Task a System.Threading.Tasks névtérhez tartozik.
Célszerű a kapcsolódó vagy hasonló típusokat ugyanabban a névtérben csoportosítani, és ezt teszi a .NET az általa biztosított típusokkal. A System.Collections.Generic névtér gyűjteményhez kapcsolódó típusok, a System.IO névtér pedig olvasási és írási fájlokat, könyvtárakat és adatokat tartalmaz. A System névtér olyan alapvető típusokat tartalmaz, mint a Math, DateTimeés Console.
Az alábbi példa bemutatja, hogyan működnek együtt a névterek az irányelvekkel using egy tipikus C#-fájlban:
using System.Globalization;
namespace MyApp.Services;
class Greeter
{
public string Greet(string name)
{
var culture = CultureInfo.CurrentCulture;
return $"Hello, {name}! Culture: {culture.Name}";
}
}
Az előző példában az using irányelv azt jelenti, hogy a System.Globalization.CultureInfo-t a CultureInfo név megadása nélkül használhatja System.Globalization.CultureInfo néven. Az namespace irányelv kijelenti, hogy az Greeter osztály a MyApp.Services névtér része. Teljesen minősített neve MyApp.Services.Greeter.
Névtér-deklarációk
A névtér deklarációja hozzárendeli a típusokat egy elnevezett csoporthoz. Minden írási típusnak egy névtérhez kell tartoznia. A névtér neve általában a projekt mappastruktúráját tükrözi. Egy mappa típusok Services/Payments például gyakran a MyApp.Services.Payments névtérhez tartoznak.
A névterek az operátorral fejezik ki a . hierarchiát, például System.Collections.Generic. A névtérneveknek érvényes C# azonosítóneveknek kell lenniük.
Fájlhatókörű névterek
A fájlhatókörű szintaxist akkor használja, ha egy fájl minden típusa ugyanahhoz a névtérhez tartozik. Adjon hozzá pontosvesszőt a névtér deklarációja után, és az a teljes fájlra vonatkozik. Nincs szükség további kapcsos zárójelekre vagy behúzásra.
namespace MyApp.Models;
class Customer
{
public required string Name { get; init; }
public string? Email { get; init; }
public override string ToString() => $"{Name} ({Email ?? "no email"})";
}
A fájlhatókörű névterek csökkentik a beágyazást, és megkönnyítik a fájlok olvasását. Fájlonként csak egy fájlhatókörű névtér-deklarációval rendelkezhet.
Jótanács
Használjon fájlhatókörű névtereket az új kódban. A legtöbb .NET-sablon és kódelemző ezt a stílust javasolja.
Blokkhatókörű névterek
Használjon blokkhatókörű szintaxist , ha több névteret kell deklarálnia ugyanabban a fájlban. Ez a stílus további behúzási szintet ad hozzá.
Fontos
Helytelen gyakorlatnak számít több névtér deklarálása ugyanabban a fájlban. A leggyakoribb forgatókönyv a fájlhatókörű névterek használata.
Az alábbi kódrészlet egy blokkhatókörű névtér példája:
namespace MyApp.Models
{
class Product
{
public required string Name { get; init; }
public decimal Price { get; init; }
public override string ToString() => $"{Name}: {Price:C}";
}
}
Irányelvek használata
Amikor nincs using direktíva, minden típusra annak teljesen minősített nevével, vagyis a teljes névtér elérési útjával és a típusnévvel kell hivatkoznia:
static void ShowFullyQualified()
{
// Without a using directive, use the fully qualified name:
System.Console.WriteLine("Hello from fully qualified name!");
}
A using fájl tetején lévő direktíva importál egy névteret, így a típusokat egyszerű nevük alapján használhatja:
static void ShowShortName()
{
// With 'using System;' (or implicit usings enabled), use the short name:
Console.WriteLine("Hello from short name!");
}
További információt az irányelvbenusing talál.
Globálisan használt irányelvek
Ha minden fájlba ugyanazokat using az irányelveket írja, a globálisan használt irányelvek lehetővé teszik, hogy egyszer deklarálja őket a teljes projekthez. Helyezze őket bármilyen fájlba. Számos csapat hoz létre egy dedikált GlobalUsings.cs fájlt:
global using System.Text;
global using System.Text.Json;
A globális használat deklarálása után a projekt minden fájlja hivatkozhat az adott névtérből származó típusokra egyszerű nevek használatával, további using irányelv nélkül.
Implicit használat
A .NET SDK automatikusan generál globális használati irányelveket a projekt típusa alapján a leggyakoribb névterekhez. Implicit használat engedélyezése a projektfájlban megadott beállítással <ImplicitUsings>enable</ImplicitUsings> . Például egy konzolalkalmazás-projekt automatikusan importálja System, System.Collections.Generic, System.IO, System.Linq, System.Threadingés System.Threading.Tasks. Az aktuális SDK lehetővé teszi ImplicitUsings, amikor új projektet hoz létre az dotnet new használatával.
További információ: Implicit using directives.
Statikus direktívák használata
Egy static using irányelv importálja egy típus statikus tagjait, hogy a típusnév előtagja nélkül is meghívhassa őket:
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;
}
A statikus használat jól működik a gyakran használt és hasonló MathConsole segédprogram-osztályokhoz.
Típus- és névtér-aliasok
Az using alias rövidített nevet hoz létre egy típushoz vagy névtérhez. Az aliasok hosszú általános típusokhoz, az elnevezési ütközések feloldásához és az olvashatóság javításához hasznosak:
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;
}
}
A C# 12-től kezdve bármilyen típusú aliast használhat, beleértve a csuplokat és a mutatótípusokat:
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);
}
}
A speciálisabb helyzetekben, amikor két szerelvény ugyanazt a teljes típusnevet határozza meg, használjon extern aliast a közöttük lévő egyértelműsítéshez.