در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

معرفی قابلیت های جدید سی شارپ 8 (بخش اول)

آخرین نسخه سی شارپ یعنی نسخه 8 توسط مایکروسافت معرفی شد و در این نسخه یکسری امکانات جدید به این زبان برنامه نویسی محبوب اضافه شده که در این مطلب قصد داریم این امکانات رو بررسی کنیم. نسخه نهایی سی شارپ 8 به همراه .NET Core 3 عرضه شده و برای استفاده از این امکانات می تونید از Visual Stusio 2019 آخرین به روزرسانی استفاده کنید. (برای استفاده از کدهای این مطلب یک پروژه از نوع کنسول و مبتنی بر .NET Core 3 ایجاد کنید)

تعریف member های struct به صورت readonly

در سی شارپ نسخه 7.2 قابلیتی اضافه شد که می توانستید یک struct را به عنوان readonly تعریف کنید، در حقیقت struct تعریف شده تبدیل به یک نوع immutable می شد (مثل نوع داده string). در سی شارپ 8 این امکان وجود داره تا از کلمه کلیدی readonly برای اعضای یک struct استفاده کنیم. برای مثال، struct زیر رو در نظر بگیرید:

public struct Point
{
    public double X { get; set; }
    public double Y { get; set; }

    public double Distance => Math.Sqrt(X * X + Y * Y);

    public override string ToString() => $"{X}, {Y} is {Distance} from the origin";
}

در کد بالا متد ToString هیچ یک از مقادیر تعریف شده struct رو تغییر نمیده، به همین خاطر می تونید این متد رو به صورت زیر readonly تعریف کنید:

public override readonly string ToString() => $"{X}, {Y} is {Distance} from the origin";

با اضافه کردن کد بالا، یک پیام warning دریافت می کنیم که خصوصیت Distance به صورت readonly تعریف نشده و ما داخل متد ToString از این خصوصیت استفاده کردیم. برای رفع این warning خصوصیت Distance رو هم به صورت readonly تعریف می کنیم:

public readonly double Distance => Math.Sqrt(X * X + Y * Y);

به این نکته توجه کنید که اگر خصوصیتی فقط بخش get رو داشته باشه به صورت readonly در نظر گرفته نمیشه و حتماً باید از کلمه کلیدی readonly استفاده کنید.
مورد بعدی اگر متدی تعریف کنید که داخلش یکی از خصوصیت های struct تغییر کنه و برای متد از readonly استفاده کنید، پیام خطا دریافت می کنید:

public readonly void ChangeValues(int x, int y)
{
    X = x;
    Y = y;
}

با تعریف متد بالا داخل struct تعریف شده، کد ما کامپایل نمیشه.

پیاده سازی پیش فرض اعضا در اینترفیس ها
یکی از قابلیت های جدید سی شارپ 8، امکان پیاده سازی پیش فرض اعضاء یک اینترفیس می باشد. برای مثال، اینترفیس زیر و کلاسی که از اون ارث بری کرده رو می بینیم:

public interface IPerson
{
    string FirstName { get; set; }
    string LastName { get; set; }

    string Fullname()
    {
        return FirstName + " " + LastName;
    }
}

public class Person : IPerson
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

همونطور که می بینید ما برای مدت Fullname یک پیاده سازی پیش فرض داخل اینترفیس IPerson داریم و داخل کلاس Person پیاده سازی برای این متد انجام نشده. حالا به صورت زیر از این متد استفاده می کنیم:

IPerson person = new Person()
{
    FirstName = "Hossein",
    LastName = "Ahmadi"
};
Console.WriteLine(person.Fullname());

 

استفاده از Pattern Matching در قسمت های جدید

قبلاً در وب سایت توسینسو در مورد قابلیت Pattern Matching توضیح دادیم. با معرفی سی شارپ 8 امکان استفاده از Pattern Matching در بخش های جدیدی از کدها وجود خواهد داشت.
یکی از این بخش ها switch expression ها هستند. کلاس زیر رو در نظر بگیرید:

public class Person
{
    public string Type { get; }

    public Person(string type)
    {
        this.Type = type;
    }
}

در متد Main ما یک ورودی از کاربر گرفته و بر اساس آن یک کلاس Person ایجاد می کنیم:

static void Main(string[] args)
{
    var type = Console.ReadLine();
}

public static Person CreatePerson(string type)
{
    switch (type)
    {
        case "CEO":
            return new Person("Chief Executive Officer");
        case "CO":
            return new Person("Co Founder");
        default:
            throw new ArgumentException("Invalid person type");
    }
}

تا اینجا هیچ چیزی تغییر نکرده، کد متد CreatePerson رو بوسیله switch expression بازنویسی می کنیم:

public static Person CreatePerson(string type) => type switch
{
    "CEO" => new Person("Chief Executive Officer"),
    "CO" => new Person("Co Founder"),
    _ => throw new ArgumentException("Invalid person type")
};

همونطور که می بینیم مقدار کد ما خلاصه تر شده و خبری از عبارت case و }{ ها نیست، این قابلیت برای زمانی که تعداد case زیاد هست خیلی می تونه کاربردی باشه.

مورد بعدی امکان استفاده از مقادیر خصوصیت های پارامتر ورودی برای تطبیق بخش مورد نظر کد هست، متد زیر بر اساس نوع Person مقدار حقوق رو برمیگردونه:

public static decimal CalculateSalary(Person person) => person switch
{
    { Type: "CEO" } => 120000,
    { Type: "CO" } => 200000,
    _ => throw new ArgumentException("Invalid person type")
};

 

قابلیت tupple pattern

اگر برای تطبیق نیاز به استفاده از چند پارامتر باشه میشه از tupple pattern استفاده کرد. در کد زیر بوسیله پارامتر های ورودی نام کاربری و کلمه عبور نوع دسترسی کاربر رو بر می گردونیم:

public static string GetPermission(string username, string password) => (username, password) switch
{
    ("admin", "123") => "total admin",
    ("user1", "159") => "content manager",
    ("user2", "456") => "comment manager",
    _ => "invalid username or password"
};

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

 

تعریف متغیرها بوسیله using

حتماً با using و کاربردهای اون آشنایی دارید. نمونه کدی از این قابلیت رو در زیر می بینید:

using (var file = File.Open("D:\\myfile.txt",FileMode.Open))
{
    // process file
}

در سی شارپ 8 نوشتن این عبارت ساده تر شده و به صورت زیر می تونید عبارت بالا رو بنویسید:

using var file = File.Open("D:\\myfile.txt", FileMode.Open);
// process file

با نوشتن کد بالا، به صورت خودکار بعد از اتمام scope ای که متغیر file داخلش تعریف شده، متد Dispose برای متغیر file فراخوانی میشه.

 

تعریف static local function

بوسیله این قابلیت می توانید داخل یک local function از نوع static تعریف کنید. کد زیر نمونه ساده ای از این قابلیت است:

int Func()
{
    int x = 1;
    int y = 2;
    return Add(x, y);

    static int Add(int n1, int n2) => n1 + n2;
}

نویسنده: حسین احمدی (عضویت در کانال تلگرام)
منبع: جزیره برنامه نویسی وب سایت توسینسو
هر گونه نشر و کپی برداری با ذکر نام منبع و نویسنده بلامانع است

عنوان
1 معرفی قابلیت های جدید سی شارپ 8 (بخش اول) رایگان
2 معرفی قابلیت های جدید سی شارپ 8 (بخش دوم) رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

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