عنوان:

‫تاریخچه و سیر تکاملی Implicit Usings تا دات‌نت 11


نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۳/۲۳ ۰۹:۳۰
آدرس: www.dntips.ir
تغییر جالبی در دات‌نت 11 (C# 15) اتفاق افتاده‌است! اضافه شدنSystem.Net.Http.Json به پروژه‌های کنسول، عملاً یکی از پرکاربردترین کتابخانه‌های مدرن را بدون نیاز به نوشتن کد اضافه در دسترس همه‌جا قرار می‌دهد و یکپارچگی خوبی با ASP.NET Core ایجاد می‌کند. پتانسیل قابلیت Implicit Usings (فضاهای نام ضمنی) اولین بار در دات‌نت 6 معرفی شد تا از شلوغی ساختار فایل‌ها (Boilerplate code) کم کند. در ادامه، تاریخچه و روند تکامل این قابلیت را از ابتدا تا دات‌نت 11 مرور می‌کنیم:

تاریخچه و سیر تکاملی Implicit Usings

1. دات‌نت 6 (C# 10) - تولد قابلیت
در دات‌نت 6، مایکروسافت ویژگی Global Usings را به سی‌شارپ اضافه کرد. بر پایه این ویژگی، قابلیت Implicit Usings در فایل پروژه (.csproj) معرفی شد. اگر این قابلیت فعال باشد، کامپایلر به طور خودکار بر اساس نوع SDK پروژه، مجموعه‌ای از فضاهای نام استاندارد را به صورت global using اعمال می‌کند.
در دات‌نت 6 برای پروژه‌های Console (Microsoft.NET.Sdk)، فضاهای نام زیر به صورت پیش‌فرض و ضمنی وارد می‌شدند:
  • System
  • System.Collections.Generic
  • System.IO
  • System.Linq
  • System.Net.Http
  • System.Threading
  • System.Threading.Tasks
💡 نکته: برای پروژه‌های وب (Microsoft.NET.Sdk.Web) یا دسکتاپ (WPF/WinForms)، فضاهای نام اختصاصیِ مربوط به خودشان (مثل Microsoft.AspNetCore.Builder یا System.Windows) نیز به این لیست اضافه می‌شد.

2. دات‌نت 7 (C# 11) - پایداری و بهبودهای جزیی
در دات‌نت 7، ساختار کلی تغییر نکرد، اما فضاهای نام ضمنی با ویژگی‌های جدید زبان هماهنگ‌تر شدند. تمرکز بیشتر روی بهینه‌سازی کدهای تولیدی پروژه‌های Web API (به ویژه Minimal APIs) بود، اما لیست پیش‌فرض پروژه‌های کنسول دست‌نخورده باقی ماند.

3. دات‌نت 8 و 9 (C# 12 & C# 13) - تمرکز روی عملکرد و پروژه‌های Cloud-Native
در این نسخه‌ها، مایکروسافت تمرکز شدیدی روی AOT (Ahead-Of-Time) Compilation و بهینه‌سازی حجم خروجی داشت. فضاهای نام پیش‌فرض تغییر اساسی نکردند، اما فریم‌ورک تلاش کرد تا فضاهای نام ضمنی، وابستگی‌های سنگینِ ناخواسته به پروژه‌ها اضافه نکنند.

4. دات‌نت 11 (C# 15) - یکپارچگی ارتباطات HTTP و JSON
و اما در دات‌نت 11 (نسخه پیش‌رو در سال 2026)، با توجه به اینکه امروزه تقریباً هر برنامه کنسول یا Worker Service به نوعی با APIهای وب و داده‌های JSON سروکار دارد، مایکروسافت تصمیم گرفت فاصله بین پروژه‌های کنسول و وب را کمتر کند.
  • تغییر اصلی: فضای نام System.Net.Http.Json به لیست بسته‌های ضمنی پروژه‌هایی که از Microsoft.NET.Sdk استفاده می‌کنند اضافه شد.
  • نتیجه: متدهای توسعه‌یافته (Extension Methods) بسیار پرکاربردی مثل GetFromJsonAsync یا PostAsJsonAsync روی کلاس HttpClient بدون نیاز به هیچ using اضافی در دسترس هستند.

مقایسه فضاهای نام پیش‌فرض در پروژه‌های Console (SDK معمولی)
جدول زیر نشان می‌دهد که در طول نسخه‌های مختلف، چه فضاهای نامی به پروژه‌های استاندارد دات‌نت (Console / Worker) به صورت ضمنی تزریق می‌شدند:
فضای نام (Namespace)دات‌نت 6 تا 9دات‌نت 11کاربرد اصلی
Systemانواع پایه‌ای داده، ساختارهای اصلی
System.Collections.Genericکار با لیست‌ها و دیکشنری‌ها
System.IOخواندن و نوشتن فایل‌ها و استریم‌ها
System.Linqکوئری‌ها و پردازش مجموعه‌ها
System.Net.Httpایجاد درخواست‌های شبکه با HttpClient
System.Threading.Tasksبرنامه‌نویسی آسنکرون (async/await)
System.Net.Http.Json✅ (جدید)سریالایز و دیسریالایز خودکار JSON در بستر HTTP

چطور این رفتار را مدیریت کنیم؟
اگر در دات‌نت 11 نخواهید این فضای نام جدید (یا هر کدام از قبلی‌ها) به صورت خودکار وارد پروژه شود، همچنان می‌توانید از فایل .csproj آن را حذف (Disable/Remove) کنید:
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net11.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <Using Remove="System.Net.Http.Json" />
  </ItemGroup>

</Project>
به طور خلاصه، تاریخچه Implicit Usings نشان می‌دهد که دات‌نت به سمت ساده‌سازی کدنویسی و کاهش تشریفات (Ceremony) حرکت می‌کند تا برنامه‌نویسان بتوانند درست مثل زبان‌های مدرن دیگر (مانند پایتون یا تایپ‌اسکریپت)، سریع‌تر هسته اصلی منطق برنامه خود را بنویسند.