MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Conectarea implicită a spațiilor de nume

Și acest set de spații de nume va fi conectat automat în toate fișierele de cod din proiect.Toate clasele există într-un anumit spațiu de nume, iar pentru a folosi aceste clase, trebuie să conectăm spațiile de nume respective sau să folosim numele complet al clasei, incluzând spațiul său de nume. Totuși, începând cu Visual Studio 2022 și .NET 6 și C# 10, putem pur și simplu să scriem în fișierul programului:

Console.WriteLine("Hello");

Fără a conecta explicit spațiul de nume System, unde se află clasa Console, totuși, această clasă va fi disponibilă și o putem folosi în orice fișier de cod C# din proiect.

Acest lucru se datorează faptului că, începând cu .NET 6, în proiect sunt conectate implicit o serie de spații de nume folosite frecvent, astfel încât nu trebuie să le conectăm explicit. Această setare este valabilă la nivelul întregului proiect.

Să deschidem fișierul proiectului. Pentru aceasta, facem dublu clic pe proiect sau facem clic dreapta și selectăm opțiunea Edit Project File din meniul apărut.

După aceasta, Visual Studio va deschide fișierul proiectului, care va arăta aproximativ astfel:

<Project Sdk="Microsoft.NET.Sdk">

 <PropertyGroup>
   <OutputType>Exe</OutputType>
   <TargetFramework>net6.0</TargetFramework>
   <ImplicitUsings>enable</ImplicitUsings>
   <Nullable>enable</Nullable>
 </PropertyGroup>

</Project>

Aici, linia:

<ImplicitUsings>enable</ImplicitUsings>

mai exact, elementul <ImplicitUsings> setează conectarea unui anumit set de spații de nume implicit. Valoarea enable indică faptul că această setare va fi aplicată.

Dacă rulăm proiectul, după compilare, în folderul obj/Debug/net8.0 vom găsi fișierul [Numele_proiectului].GlobalUsings.g.cs (de exemplu, dacă proiectul se numește FDC, fișierul se va numi FDC.GlobalUsings.g.cs). Dacă deschidem acest fișier, vom vedea următorul conținut:

global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

Aici sunt enumerate toate spațiile de nume care sunt conectate implicit în proiect:

System
System.Collections.Generic
System.IO
System.Linq
System.Net.Http
System.Threading
System.Threading.Tasks

Trebuie menționat că acest set de spații de nume este conectat implicit pentru proiectele de aplicații console, iar alte tipuri de proiecte pot avea un set diferit de spații de nume conectate implicit.

Dezactivarea spațiilor de nume implicite

În proiectele create în Visual Studio 2022 pentru .NET 6 și C# 10, această funcționalitate este activată implicit. Cu toate acestea, dacă este necesar, o putem dezactiva. Pentru aceasta, modificăm setarea astfel:

<ImplicitUsings>disable</ImplicitUsings>

După aceasta, Visual Studio 2022 va sublinia clasa Console, deoarece nu este definită nicăieri în proiect, iar spațiul său de nume nu este conectat:

În acest caz, va trebui să conectăm spațiul de nume System, unde se află clasa Console, sau să folosim numele complet:

using System;   // conectarea spațiului System
Console.WriteLine("Hello world");

// sau folosirea numelui complet al clasei
System.Console.WriteLine("Hello world");

Conectarea și deconectarea spațiilor de nume individual

În loc să conectăm implicit un set de spații de nume, putem conecta și deconecta individual spațiile de nume. Să modificăm fișierul proiectului astfel:

<Project Sdk="Microsoft.NET.Sdk">

 <PropertyGroup>
   <OutputType>Exe</OutputType>
   <TargetFramework>net6.0</TargetFramework>
   <ImplicitUsings>disable</ImplicitUsings>
   <Nullable>enable</Nullable>
 </PropertyGroup>
 
 <ItemGroup>
   <Using Include="System" />
   <Using Include="System.Threading.Tasks" />
 </ItemGroup>
 
</Project>

Aici, atributul Include al elementului Using conectează spațiile de nume global pentru întregul proiect. De exemplu:

<Using Include="System" />

Conectează spațiul de nume System. Astfel, nu trebuie să-l conectăm în fișierele de cod din proiect.

Situația inversă - deconectarea unor spații de nume inutile dintre cele conectate implicit. Pentru aceasta se folosește atributul Remove al elementului Using:


<Project Sdk="Microsoft.NET.Sdk">

 <PropertyGroup>
   <OutputType>Exe</OutputType>
   <TargetFramework>net6.0</TargetFramework>
   <ImplicitUsings>enable</ImplicitUsings>
   <Nullable>enable</Nullable>
 </PropertyGroup>
 
 <ItemGroup>
   <Using Remove="System" />
   <Using Remove="System.Threading.Tasks"/>
 </ItemGroup>
 
</Project>

În acest caz, spațiile de nume System și System.Threading.Tasks sunt deconectate.

← Lecția anterioară Lecția următoare →