دات نت

ویژگی های دات نت 6

سریعترین و جدید ترین نسخه دات نت در حال حاضر نسخه 6 آن می باشد که دومین نسخه ای است که بعد از یکی شدن  .Net core  و .Net framework منتشر می شود. این نسخه سرشار است از بهبود های خوب در بخش کارایی و کم کردن هزینه نگهداری از سرویس هایی که با این نسخه ایجاد شده اند. یکی از نکات مهم در مورد این نسخه پشتیبانی طولانی مدت و 3 ساله تیم مایکروسافت از آن است و به همین دلیل به آن نسخه LTS می گویند.

به همراه .Net 6  نسخه جدید ویژوال استودیو یعنی Visual Studio 2022  و C# 10 نیز معرفی شدند. برای استفاده از این نسخه حتما باید از Visual Studio 2022 استفاده کنید.

Minimal APIs

در این نسخه به کمک قابلیت Top level که قبلا در مورد آن صحبت کردیم امکان پیاده سازی و ایجاد اپلیکیشن های فوق العاده کوچک به وجود آمد. وقتی از کوچکی یک اپلیکیشن در دنیای .Net صحبت میکنیم باید کدهای الان را با نسخه های قدیمی مقایسه کرد که برای راه اندازی یک سرویس کوچک چه کارهایی لازم بود انجام شود. برای ایجاد یک minimal api شما فقط لازم است در فایل program.cs کد های زیر را قرار دهید و تمام.

 using Microsoft.AspNetCore.Builder;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/hello", () => "Hello, World!");

app.Run();

File IO Improvements

سیستم FileStream در این نسخه به کلی بازنویسی شده و هدف این بازنویسی بهبود عملیات های خواندن و نوشتن نام همزان اعلام شده است. در این بازنویسی استفاده از حافظه به شدت بهینه شده است و این بهینه سازی برای تمامی پلتفرم ها ارائه شده است.کد زیر یک فایل 100 مگابایتی را درون یک فایل ذخیره می کند.


private byte[] _bytes = new byte[8_000];

[Benchmark]
public async Task Write100MBAsync()
{
    using FileStream fs = new("file.txt", FileMode.Create, FileAccess.Write, FileShare.None, 1, FileOptions.Asynchronous);
    for (int i = 0; i < 100_000_000 / 8_000; i++)
        await fs.WriteAsync(_bytes);
}


که در جدول زیر می توان تست کارایی آن را با .Net 5 مقایسه کرد.

تولید کننده کد برای System.Text.Json

با افزودن تولید کننده کد برای System.Text.Json دیگر نیازی نیست تا در زمان اجرا از روش های پرهیزنه ای مثل reflection استفاده شود این قابلیت جدید به شما امکان این را می دهد که در زمان Build کدهای بهینه ای برای Serialization تولید کنید.

Global using directives

همه ما می دانیم که using ها  و  namespace ها چطوری کار می کنند. در.Net 6  امکان تعریف using ها به صورت Global اضافه شد به این صورت که شما در یک فایل .cs حتی program.cs می توانید از این قابلیت استفاده کنید و در تمامی فایل هایی که کامپایل می شوند به فایل هایی که درون این namespace هستند دسترسی داشته باشید. این قابلیت در پروژهای قدیمی به صورت یک انتخاب است و شما می توانید آن را فعال کنید اما در پروژه های جدید به صورت پیش فرض فعال است.


global using System;
global using static System.Console;
global using Env = System.Environment;

File-scoped namespaces

فضاهای نامی وابسته به فایل به شما این امکان را می دهند که فضا نامی را به کل فایلی که در آن هستید اختصاص دهید بدون اینکه نیاز داشته باشید از {} استفاده کنید.


namespace MyNamespace;

class MyClass { ... } // Not indented


Hot Reload

یکی از جذاب ترین قابلیت های این نسخه hot reload است. متوقف کردن و اجرای دوباره اپلیکیشن ها در حین توسعه برای نوشتن کدها و مشاهده نتیجه تغییرات همیشه اتفاقی بوده که در روز بارها و بارها آن را انجام داده ایم. گاهی برای یک تغییر کوچک انجام این عملیات غیر ضروری به نظر می رسد در نسخه جدید .Net با کمک قابلیت hot reload شما می توانید بدون متوقف کردن و اجرای دوباره برنامه نتیجه تغییرات کدهایتان را مشاهده نمایید.

پشتیبانی ازArm64

در مورد پشتیبانی .Net 6 از Arm64 در سیستم عامل های مک و ویندوز باید نکته های زیر را بدانید.

  • .Net 6 از پردازنده های Arm64 و x64 پشتیبانی می کند و توصیه میکند از آنها استفاده کنیم.
  • هچنین در runtime های .Net 6 نیز از پردازنده های Arm64 و x64 پشتیبانی می کنند.
  • .Net core 3.1 و .Net 5 هم با این پردازنده ها کار می کنند اما از تمامی امکانات آنها پشتیبانی نمیکنند.

ثبت فونت دلخواه در Windows Forms

.Net 6 برای برنامه نویسان دسکتاپ نیز ویژگی های خوبی اضافه کرده که یکی از آنها تعریف فونت پیشفرض برای کل برنامه است. شما می توانید در این نسخه برای کل برنامه یک فونت دلخواه را تنظیم و ثبت کنید.


void Application.SetDefaultFont(Font font);

.NET MAUI

.Net MAUI یک ابزار چند سکویی برای ایجاد رابط های کاربری است که نسخه RC آن در فصل اول 2022 قرار است منتشر شود با کمک این ابزار می توان برای پلتفرم های ویندوز، آندروید و IOS رابط کاربری تولید کرد.

 HTTP/3

در این نسخه شاهد پشتیبانی از HTTP/3 هستیم که هنوز به صورت کامل از جدید ترین نسخه HTTP پشتیبانی نمی شود. یکی از قابلیت های HTTP/3  اصطلاحا QUIC نام دارد که اتصالهای ایجاد شده از این نوع شده وابسته به IP نیستند و کلاینت های موبایلی را قادر می سازد تا بین اتصال های داده ای و Wifi ها رفت و آمد داشته باشند.

OpenTelemetry

در این نسخه از .Net بهبود های در پشتیبانی از OpenTelemetry انجام گرفته است. OpenTelemetry مجموعه ای از ابزار ها و سرویس هایی هستند که به شما کمک می کند رفتار و کارایی اپلیکیشن خو را تحلیل و بررسی کنید.

Generic math

این عملیات در مورد استفاده از عملگرهای محاسباتی روی نوع های جنریک می باشد. قبل از C# 10  نمی توانستید این کار را انجام بدهید اما با ویژگی به نام static abstract که در C# 10 preview  وجود دارد می توان این عملیات ها را پیاده سازی کرد.

NuGet package validation

اگر شما یک توسعه دهنده پکیج هستید به کمک این ابزار ها می توانید از سالم بودن و منسجم بودن پکیج های خود اطمینان حاصل کنید.

PriorityQueue class

امکان تعریف لیست هایی که در آن اعضا به ترتیب اولویت و بر اساس منطق وارد و خارج می شوند. به این ترتیب که اعضای قدیمی تر زودتر از بقیه خارج می شوند.

امکانات جدیدMicrosoft.Extensions

در کتابخانه Microsoft.Extentions بهبود هایی در .Net 6 ایجاد شده است که در جدول زیر آنها را می بینیم.

Namespaceبهبود
Microsoft.Extensions.DependencyInjectionبه کمک CreateAsyncScope می توانید به صورت ایمن بلاک هایی تعریف کنید در آن از سرویس های IAsyncDisposable استفاده شده است.
Microsoft.Extensions.Hostingبه کمک متد ConfigureHostOptions می توانید اپلیکیشن را به سادگی راه اندازی کنید.
Microsoft.Extensions.Loggingاین کتابخانه یک تولید کننده کد برای بهبود کارایی عملیات های لاگ زدن دارد. در زمان کامپایل این تولید کننده کد متد هایی را برای لاگ زدن ایجاد می کند که بسیار سریعتر از راه حل های زمان اجرا برای لاگ زدن هستند.

امکانات جدید LINQ

متد های جدیدی به Linq در فضای نام System.Linq.Queryable اضافه شده است که در جدول زیر آنها را با هم بررسی میکنیم.

Enumerable.TryGetNonEnumeratedCount<TSource> (IEnumerable<TSource>, Int32)تعداد اعضای درون یک لیست را بر میگرداند بدون اینکه مجبور باشد تک تک اعضا را بشمارد.
Enumerable.Chunk<TSource> (IEnumerable<TSource>, Int32)تقسیم کردن لیست به تعداد لیست های کوچکتر
Enumerable.MaxBy و Enumerable.MinByپیدا کردن بزرگترین و کوچکترین عضوی که شرط ما را قبول کند.
Enumerable.DistinctBy, Enumerable.ExceptBy,  Enumerable.IntersectBy, و Enumerable.UnionByاین تغییرات جدید که عملیات مبتنی بر مجموعه را انجام می‌دهند برای شما این امکان را فراهم می کنند که با استفاده از یک تابع انتخابگر، برابری را مشخص کنید.
Enumerable.ElementAt<TSource> (IEnumerable<TSource>, Index) و  Enumerable.ElementAtOrDefault<TSource> (IEnumerable<TSource>, Index)یک ایندکس گرفته و مقدار آن را بر می گرداند.
Enumerable.FirstOrDefault<TSource> (IEnumerable<TSource>, TSource), Enumerable.FirstOrDefault<TSource> (IEnumerable<TSource>,Func<TSource,Boolean>,TSource), Enumerable.LastOrDefault<TSource> (IEnumerable<TSource>,TSource), Enumerable.LastOrDefault<TSource> (IEnumerable<TSource>, Func<TSource,Boolean>, TSource), Enumerable.SingleOrDefault<TSource> (IEnumerable<TSource>, TSource) و Enumerable.SingleOrDefault<TSource> (IEnumerable<TSource>, Func<TSource,Boolean>, TSource)اضافه شدن پیاده سازی های جدید که به شما اجازه می دهد مقدار پیش فرض را نیز تعیین کنید.
Enumerable.Max<TSource>(IEnumerable<TSource>, IComparer<TSource>) و Enumerable.Min<TSource>(IEnumerable<TSource>, IComparer<TSource>)پیاده سازی های جدید که به شما اجازه میدهد مقایسه گر مورد نظر خود را مشخص کنید.
Enumerable.Take<TSource>(IEnumerable<TSource>, Range)به عنوان ورودی یک بازه از شما دریافت می کند. و بازه مورد نظر را بر میگرداند.
Enumerable.Zip<TFirst,TSecond,TThird>
(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>)
یک لیست از تاپل ها را برای شما از 3 مدل لیستی که به آن میدهید تولید میکند.
تصویر نویسنده
lotfi

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *