برنامه نویسی,دات نت

ویژگی های دات‌نت 5

.Net 5 اولین نسخه از یکی شدن .Net core و .Net framework بود. این نسخه ایجاد شد تا تعداد کاربران بیشتری از .Net framework به .Net 5 مهاجرت کنند..Net 5 در ماه می 2019 معرفی شد و در نوامبر 2020 به صورت رسمی منتشر شد.

Top-level programs

تا قبل از ارائه این ویژگی شما برای نوشتن یک کد به زبان C# حتما باید ساختارهای مورد نیاز را رعایت می کردید فرض کنید که می خواهید یک کلاس ساده بنویسید که یک پیام را در خروجی چاپ کند. در روش قبل باید شبیه به کد زیر آن را می نوشتید.

using System;
 
namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

برای کسانی که تازه با زبان C# آشنا می شدند ممکن بود سوالاتی مختلفی پیش بیاید که using چیست؟ namespace به چه معناست و … اما اکنون با استفاده از Top-level شما می توانید خیلی از قسمتهای بالا را حذف کرده و دقیقا کدهای اصلی برنامه خود را بنویسید. یعنی فقط کافی است بنویسید.

using System;

Console.WriteLine("Hello, World!");

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

تعریف توابع در Top-level

در نمونه کد زیر می توان نحوه تعریف توابع در این ویژگی را مشاهده کنیم.

using System;

Console.WriteLine(SayHello("students"));

static string SayHello(string name)
{
    return "Hello, " + name;
}

تعریف کلاس در Top-level

برای تعریف کلاس ها هم می توان به شیوه زیر عمل کرد.

using System;

var greeter = new Greeter();

var helloTeacher = greeter.Greet("teacher");
var helloStudents = SayHello("students");

Console.WriteLine(helloTeacher);
Console.WriteLine(helloStudents);

static string SayHello(string name)
{
return "Hello, " + name;
}

public class Greeter
{
    public string Greet(string name)
    {
        return "Hello, " + name;
    }
}

این قابلیت خوب زبان C# باعث تمیز شدن و خواناتر شدن تابع main درون فایل Program.cs می شود که در آن کلاس و متد به صورت خودکار ساخته می شوند.

Windows Forms designer

در ویژوال استودیو 16.8 بخش طراحی windows forms اکنون امکان استفاده از تمامی کنترل ها را در بروزرسانی جدید دارد. این بخش تمام عملیات های مورد انتظار شما برای طراحی مثل درگ دراپ را اکنون دارد.

Windows Arm64

اپلیکیشن های دات نت از این نسخه به بعد می توانند به صورت native روی پردازنده های Arm64 اجرا شوند. هم چنین این قابلیت برای لینوکس های دارای پردازنده Arm64 نیز ایجاد شده است. شما قبلا برنامه هایی را که با .Net core نوشته می شدند را روی سیستم های Arm64 اجرا می کردید اما این اجرا به صورت شبیه سازی x86 انجام می شد اما از این نسخه به بعد با اجرا شدن به صورت native روی Arm64 شاهد بهبودهای خیلی خوبی در کارایی برنامه های .Net خواهید بود.

System.Text.Json

این کتابخانه به طور قابل ملاحضه ای در .Net 5 مورد بهبود قرار گرفته است. هم از نظر کارایی و هم از نظر آسان بودن کار با آن برای کسانی که از کتابخانه هایی مثل Newtinsoft.Json استفاده می کردند. بهبود کارایی این کتابخانه از دست آوردهای این نسخه بود. در ادامه بعضی از این بهبود های System.Text.Json را بررسی می کنیم.

HttpClient extension methods

به کمک کتابخانه System.Test.Json متدهای الحاقی جدیدی برای کار با کلاس HttpClient اضافه شده است تا به کمک آنها از پیچیدگی کار با این کلاس کاسته شود.در کد زیر که با کمک Top-Level نوشته شده است می توانید مشاهده کنید که چگونه از تابع GetFromJsonAsync<T> استفاده شده است.

using System;
using System.Net.Http;
using System.Net.Http.Json;

string serviceURL = "https://localhost:5001/WeatherForecast";
HttpClient client = new();
Forecast[] forecasts = await client.GetFromJsonAsync(serviceURL);

foreach (Forecast forecast in forecasts)
{
    Console.WriteLine($"{forecast.Date}; {forecast.TemperatureC}C; {forecast.Summary}");
}

// {"date":"2020-09-06T11:31:01.923395-07:00","temperatureC":-1,"temperatureF":31,"summary":"Scorching"}            
public record Forecast(DateTime Date, int TemperatureC, int TemperatureF, string Summary);


بهبود پشتیبانی از immutable types

راه های مختلفی برای تعریف immutable ها وجود دارد، رکورد جدیدترین راه ایجاد آنها است که JsonSerializer در .Net 5 از آنها پشتیبانی می کند. در کد زیر می توانیم نمونه ای از این کاربرد را مشاهده کنیم که در آن از struct استفاده شده است.


using System.Text.Json;
using System.Text.Json.Serialization;

var json = "{"date":"2020-09-06T11:31:01.923395 - 07:00","temperatureC ":-1,"temperatureF ":31,"summary ":"Scorching "} ";

var options = new JsonSerializerOptions()
{
    PropertyNameCaseInsensitive = true,
    IncludeFields = true,
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};

var forecast = JsonSerializer.Deserialize(json, options);

Console.WriteLine(forecast.Date);
Console.WriteLine(forecast.TemperatureC);
Console.WriteLine(forecast.TemperatureF);
Console.WriteLine(forecast.Summary);


var roundTrippedJson = JsonSerializer.Serialize(forecast, options);


Console.WriteLine(roundTrippedJson);


public struct Forecast
{
    public DateTime Date { get; }
    public int TemperatureC { get; }
    public int TemperatureF { get; }
    public string Summary { get; }
    [JsonConstructor]
    public Forecast(DateTime date, int temperatureC, int temperatureF, string summary) => (Date, TemperatureC, TemperatureF, Summary) = (date, temperatureC, temperatureF, summary);
}

پشتیبانی از fields

در نسخه های قدیمی JsonSerializer نمی توانست Fieldها را serialize کند و این مسئله برای کدهای قدیمی که قابلیت تغییر رو نداشتند یک مشکل اساسی به نظر می آمد. اما در نسخه جدید .Net این امکان فراهم شده است.


using System;
using System.Text.Json;

var json = "{\"date\":\"2020-09-06T11:31:01.923395-07:00\",\"temperatureC\":-1,\"temperatureF\":31,\"summary\":\"Scorching\"} ";
var options = new JsonSerializerOptions()
{
    PropertyNameCaseInsensitive = true,
    IncludeFields = true,
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
var forecast = JsonSerializer.Deserialize(json, options);

Console.WriteLine(forecast.Date);
Console.WriteLine(forecast.TemperatureC);
Console.WriteLine(forecast.TemperatureF);
Console.WriteLine(forecast.Summary);

var roundTrippedJson = JsonSerializer.Serialize(forecast, options);

Console.WriteLine(roundTrippedJson);

public class Forecast
{
    public DateTime Date;
    public int TemperatureC;
    public int TemperatureF;
    public string Summary;
}

Microsoft.Extensions.Logging

یکی دیگر از تغییرات جذاب مربوط به کتابخانه  Microsoft.Extensions.Loggingاست. در نسخه جدید شما می توانید ساختار دلخواه خود را برای نمایش لاگ ها در کنسول تعریف کنید و روی رنگ و ظاهر آن کنترل داشته باشید.

کل برنامه در یک فایل (Single file applications)

در این ویژگی اپلیکیشن تولید شده را می تواند در یک فایل تکی به همراه تمامی نیازمندیهایش برای اجرا قرار داد در .Net 5 تمرکز این ویژگی بیشتر برای سیستم عامل لینوکس بود. فایل های تولید شده می توانند به دو صورت framework-dependent یا self-contained تولید شوند. framework-dependent فایلهایی کوچک را تولید می کند که برای اجرا فقط نیازمند .Net runtime می باشند اما فایل های self-contained سنگین تر و بزرگ تر هستند زیر تمامی موارد برای اجرا مثل .Net runtime را درون خود دارند.

تصویر نویسنده
lotfi

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

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