ویژگی های جدید C# 7.2 در visual studio 2017

در این مقاله می خواهیم در مورد ویژگی های جدید سی شارپ 7 صحبت نماییم و تمام ویژگی های آن را با یک مثال تعریف کنیم و در آخر نحوه ی اضافه کردن آن را به visual بررسی نماییم و توضیح دهیم.

ویژگی های جدید C# 7.2 در visual studio 2017

در این مقاله می خواهیم در مورد ویژگی های جدید سی شارپ 7 صحبت کنیم که شامل ,  منبع فقط خواندنی و در مورد دسترسی به متغییر ها publicو دسترسی Modifier و... صحبت نماییم

می خواهیم اینجا ویژگی های c# 7.0 و c# 7.1 را پوشش دهیم

ویژگی های C# 7.0

1-توابع محلی یا توابع درهم

2-حروف دودویی

3-عدد

4-تطبیق الگو

5-ref بازگشتی و رکورد محلی

6- Throw Expressions

7-متدها و سازنده ها – مخرب ها- متغییر خارجی

8async-

9-Tuple ها و عبارات throw

10-متغیر های خارجی و تخریب و رد کردن

در c# 7.1

Async Main: روش اصلی بازگرداندن task

    نام عناصر Tuple درج شود

مقادیر پیش فرض و نوع های بازگشتی

تطابق الگو با Generics

حالا سی شارپ :7.2

ref readonly

تغییر دسترسی ها public-protecded

جدا کننده دیجیتال پس از مشخص کننده پایه

آرگومان نامگذاری نشده

حالا می خواهیم هر کدادم از این ها را تعریف کنیم

ref readonly

این یک ویژگی جدید در سی شارپ 7 است که در سی شارپ 7.2 هم آمده است این رفتار مخالف متغییر است برای درک آن باید از رفتار ref و out آگاهی داشته باشید

در مثال زیر هر کدام از این ها به عنوان مرجع منتقل می شود قطعه کد آن به صورت زیر است:

  static void Main(string[] args)  
          {  
              int x, y =0;  
              DoSomething(out x, ref y);  
            WriteLine($"x: {x} \ny: {y}");  
        }  
          public static void DoSomething(out int x, ref int y)  
        {  
              x = 10;  
              y = 20;  
}

خروجی

x: 10

y: 20

رفتار موجود یک متغیر را به عنوان یک مرجع با گزینه read-write (input-output) ارسال کنید.

یک متغیر که با کلید واژه ref نقل می شود می تواند برای اهداف ورودی و خروجی نیز استفاده شود

  static void Main(string[] args)  
  {  
      int x =20;  
      DoSomething(ref x);  
      WriteLine($"Value of x is :{x}");  
  }         
  public static void DoSomething(ref int x)  
  {  
      WriteLine($"Value of x is :{x}");  
      x += 10;  

خروجی

Value of x is :20

Value of x is :30

رفتار موجود یک متغیر را به عنوان مرجع با گزینه write-only (خروجی) ارسال کنید.

'out'
متغیر فقط برای خروجی است نه برای ورودی. این بدان معنی است که ما نمی توانیم مقدار متغیر را به عنوان ورودی با استفاده از پارامتر خروجی منتقل کنیم.

static void Main(string[] args)  
{  
    int x = 20;  
    DoSomething(out x);  
    WriteLine($"Value of x is :{x}");  
}  
public static void DoSomething(out int x)  
{  
    //Use of unassigned out parameter 'x'  
    x += 10;  
}

خطای کامپایلر: "استفاده از پارامتر غیر مجاز x"
رفتار جدید در C # 7.2: تغییر متغیر به عنوان یک مرجع با گزینه فقط خواندنی (ورودی).

به قطعه کد زیر نگاه کنید"

static void Main(string[] args)  
{  
  
    int a = 20, b = 30, c=0;              
    Write($"Sum of {a} and {b} is: ");  
    Add(a, b, ref c);  
    WriteLine($"{c}");  
}  
public static void Add(ref readonly int x, ref readonly int y, ref int z)  
{  
    z=x + y + z;  
} 

شما می توانید ببینید که متغیر "x" و "y" به عنوان ref readonly منتقل شده است در حالی که z به عنوان ref ارسال شده است

static void Main(string[] args)  
{  
  
    int a = 20, b = 30, c = 10;  
    Write($"Sum of {a} and {b}is: ");  
    Add(a, b, out c);  
    WriteLine($"{c}");  
}  
public static void Add(ref readonly int x, ref readonly int y, out int result)  
{  
    result = x + y;  
}

حالا متغیر 'x' و 'y' فقط خواندنی است و 'result' متغیر فقط نوشتن است. اگر ما سعی می کنیم که رفتار آن را تغییر دهیم، آن زمان خطای کامپایل را می دهد.  در تصویر زیر این خطا را مشاهده می کنید

Private protected

در سی شارپ 7 علاوه بر دسترسی های قبلی یکی دیگر هم اصافه شده است  

public

protected

internal

private

protected internal

private protected

با این حال از هر کدام از موارد بالا می توان استفاده کرد و هر کدام از این ها قوانین خاص خود را دارد

private protected این دسترسی به این صورت است که با انواع مشتق شده که نوع آن محتوا است دسترسی دارد

مانند نمونه ی زیر

using System;  
using static System.Console;  
  
namespace PrivateProtectedExample  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
              
        }  
    }  
  
    public class Employee  
    {  
        public int Id { get; set; }  
        protected int Name { get; set; }  
        internal DateTime DOB { get; set; }  
        private Decimal Salary { get; set; }  
        protected internal int DepatmentId { get; set; }  
        private protected string ProjectName { get; set; }  
    }  
  
    class SubEmployee : Employee  
    {  
        void Print()  
        {  
            SubEmployee employee = new SubEmployee();  
            WriteLine(employee.ProjectName);  
        }  
    }  
}

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

در مثال بالا private protected در خارج از کد برای کلاس فرزند بدون دسترسی است

در مثال زیر عضو خصوصی محافظت شده در خارج از مجمع برای کلاس فرزند غیرقابل دسترسی است

عضو خصوصی حفاظت شده در داخل کلاس برای کلاس های غیر ارث برده شده غیرقابل دسترس است.

بنابر این private protected در همان کد با انواع مشتق از نوع متن دسترسی دارد

جدا کننده دیجیتال پس از مشخص کننده پایه (جداساز دیجیتال پیشرو)

خلاصه ای از بهبود عددی در C # 7.0 انجام شده است

و در سی شارپ 7 باینری معرفی شده است.

در C # 7.0 پیشرفت های زیر برای عبارات عددی انجام شده است که به شرح زیر است:

Decimal Literal

int length = 50;

Hexadecimal Literal 

int number = 0X3E8;
or
int number = 0x3E8;

Binary Literal

int fifty = 0B110010;

or

int fifty = 0b110010;

بنابراین، می توانید ببینید که هنگام استفاده از یک پیشوند با نوع داده های صحیح، پیش فرض یک عدد در سیستم اعشاری است. در حالی که برای تعداد هگزادسیمال، ما باید از پیشوند "0X" یا "0x" استفاده کنیم

جدا کننده دیجیتال

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

ما در سی شارپ فقط از یک جداساز رقمی استفاده می کنیم

اگر مانند مثال بالا کد بزنید

int fifty = 0B_11_00_10;

سپس خطای تلفیقی ایجاد خواهد شد

با این حال در سی شارپ 7.2 با موفقیت کامپایل می شود زیرا از جداساز عددی پشتیبانی می کند

آرگومان نامگذاری نشده

تا سی شارپ 7.1 این محدودیت دارد که ما نمی توانیم از آرگومان نام گذاری شده قبل از پارامترهای نا مشخص استفاده کنیم در زیر یک مثال برای شما می زنیم:

بررسی پارامترهای نام گذاری شده:

در سی شارپ 4 یک نوع ارگومان تعریف شده است که به عنوان پارامتر نامیده می شود با استفاده از این ویژگی ما می توانیم یک پارامتر را با نام یک پارامتر با یک روش مشخص کنیم در اینجا ما از یک روش ساده استفاده می کنیم:

با این حال، تمام پارامترهای نامگذاری شده  پس از argument ثابت می شود. اگر ما بعد از استدلال نامیده شده، یک استدلال ثابت ارائه کنیم، خطای زمان کامپایل بعدی را ارائه می دهد. "معیارهای نامگذاری شده باید بعد از اینکه همه استدلال های ثابت مشخص شده اند، نمایش داده شود.

Non Trailing نامیده شده در c# 7

static void Main(string[] args)  
{  
    long result = Sum(10, num2nd:20);  
}  
  
public static long Sum(int num1st, int  num2nd=default, int num3rd=default)  
{  
    return num1st + num2nd + num3rd;  
}

شما می توانید 2 تا پارامتر را ببینید و می توانید پارامتر اختیاری را حذف کنید حالا پارامتر 3 را نیز منتقل کنید

شما می توانید در تصویر بالا مشاهده نمایید بعد از اینکه همه ی استدلال های ثابت مشخص شد باید مشخصه های آرگومان را صدا بزنیم

حالا نسخه ی زبان سی شارپ را به سی شارپ 7.2 تغییر دهید و آن را دوباره کامپایل نمایید

بنابراین، در C # 7.2 اجباری است که به عنوان استدلال پیشنهادی به عنوان متغیر صحیح در نظر گرفته نشود.

برای این مقاله حتما شما باید سی شارپ خود را ارتقا دهید

برای اینکه بخواهید زبان شی شارپ را از 7 به 7.2 ارتقا دهید با استفاده از ریکامپایل می توانید این کار را انجام دهید ولی کار دیگری هم می توانید انجام دهید

Solution Explorer را در Visual Studio 2017 باز کنید

پروژه را انتخاب کرده و روی آن کلیک راست کرده و منوی context را باز کنید و Properties را انتخاب کنید.

درون پروژه، پنجره Properties روی «BUild » کلیک کرده و سپس بر روی دکمه «Advanced ...» کلیک کنید.

پنجره " Advanced Build Settings" را باز می کند.

در پنجره « Advanced Build Settings »، شما می توانید هر نسخه زبان C # موجود را انتخاب کنید

تاکنون از 4 ویژگی جدید سی شارپ 7.2  صحبت کردیم که عبارت اند از: ref readonly , private protected, access modifier و Digit Separator که با چند مثال در مورد آن ها توضیح دادیم ویژگی های دیگری هم در سی شارپ 7.2 وجود دارد و اضافه شده است با این حال در اینجا ویژگی هایی که نهایی شده است در نرم افزار visual و آن را پشتیبانی می کند ارائه شده است در مقالات بعدی در مورد ویژگی های دیگر آن توضیح خواهیم داد.