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

قابلیت های جدید سی شارپ 6

در این مطلب قصد دارم خدمت برنامه نویسان عزیز تغییرات زبان برنامه نویسی سی شارپ رو که در نسخه 6 انجام شده معرفی کنم و این تغییرات در 8 آیتم طبقه بندی شده که در ادامه با ذکر مثال هم به صورت کد قدیم و هم به صورت کد جدید این مطلب رو ادامه خواهم داد. اگر یادتان باشد قبلاً در انجمن نسل جدید کامپایلر های دات نت Roslyn رو معرفی کرده بودم و باید بدانید نسخه ششم از سی شارپ بر پایه این کامپایلر است برای اطلاعات بیشتر لینک فوق را مشاهده کنید.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
قابلیت های جدید در زبان سی شارپ
ویژگی های سی شارپ جدید

Auto Property Initializer

اگر خاطرتان باشد قبلاً زمانی که یک property معرفی میکردیم باید در سازنده کلاس به آن را مقدار دهی میکردیم ولی در نسخه جدید میتوان زمان تعریف یک Property به آن یک مقدار اولیه تخصیص داد در پایین نمونه کد قبلی را میتوان دید

public class Employee
{
    public Guid EmpId {get;set;}
    public Employee()
    {
        EmpId = Guid.NewGuid();
    }
}

و در ادامه نمونه کد جدید(C# 6.0) رو میتونید ببینید

public class Employee
{
    public Guid EmpId {get;set;} = Guid.NewGuid();

    //Works with read only property also
    public string FullName{get;} = "Farhad Khanlari";
}

Expression-bodied Members

اگر شما یک Method یا یک Property دارید که آن متد یا پروپرتی دارای فقط یک خط دستور باشد می‌توانید به جای علامت {} ازبزرگتر مساوی => استفاده کنید ، کد نسخه‌ قبلی Method را ببینید:

public void PrineName()
{
    Console.Writeline(emp.FullName);
}

و در ادامه کد نسخه‌ قبلی Property را با هم ببینیم:

public string FullName { get {return emp.FirstName + em.LastName; } }

و برای قابلیت Expression-bodied Members در کد جدید ورژن 6 که مخصوص Method هست رو با هم ببینیم:

public void PrineName() => Console.Writeline(emp.FullName);

مثالی از کد جدید(C# 6.0) نمونه خاصیت Property

public string FullName => emp.FirstName + emp.LastName;

String Interpolation

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

string fullname = "Farhad Khanlari"
Console.Writeline("Name - " + fullname);

کد جدید 6 #c

string fullname = "Farhad Khanlari"
Console.Writeline("Name - \{fullname}" );

با کمی دقت میتوان دریافت که در این قابلیت نام یا همان اسم متغیر را پس از اس علامت بک اسلش \ داخل آکولاد {} نوشت.

Using Static Class import

در نسخه C# 6.0 قابلیت دیگری اضافه شده که شما برنامه نویسان عزیز میتوانید کلاس‌هایی از نوع static را در لیست using ها قرار دهید که البته این کار در نسخه های قدیمی تر اصلاً وجود نداشت ، مثلاً زمانی که شما میخواستید WriteLine را بنویسید حتماً باید Console را در قبل این دستور به کار میبردید و فقط میتوانستید System را در Using ها استفاده کنید و کد زیر مثالی در همین خصوص است.

using System.Console;

  class Program
    {
        static void Main(string[] args)
        {
            //Using WriteLine directly instead of 
            // Console.WriteLine
            WriteLine("Farhad Khanlari with itpro");
        }
    }

Exception Filters

اگر میخواهید برنامه ای که مینویسید حرفه ای باشد باید از دستورات Catch بهره بگیرید تا بتوانید برنامه ای خوب و کاربر پسند داشته باشید و برنامه شما به هر دلیلی با خطا متوقف نشود Exception یا استثنائات در هر برنامه ای وجود دارد ولی در این نسخه میتوانید این قابلیت را فیلتر کنید مثلاً اگر فلان شرط برقرار بود دستورات Catch اجرا گردد

{
    throw new MyException { Severity = 3 };
}
catch (MyException ex) if (ex.Severity == 2)
{
    Console.WriteLine("Will not execute");
}
catch (MyException ex) if (ex.Severity == 3)
{
    Console.WriteLine("Will be executed");
}

Dictionary Initializer

در نسخه جدید مقداردهی به ساختمان‌ داده‌ ای که از نوع Dictionary هست ساده تر و بهتر صورت می پذیرد.

Dictionary<string, string> eplTeams = new Dictionary<string, string>()
{
    { "ITPRO", "IT" },
    { "Programing", "PRO" },
    { "professional", "ITPRO" }
};

و در کد زیر کد C# 6.0 را برای این قابلیت خواهید دید

Dictionary<string, string> eplTeams = new Dictionary<string, string>()
{
    ["ITPRO]  =  "IT",
    ["Programing"] =  "PRO",
    ["professional"] = "ITPRO"
};

Await in Catch block

در نسخه های قبلی نیز با استفاده از await در بلوک catch خیلی کمک میکرد به برنامه نویس که در این نسخه با ذخیره LOG در فایل یا دیتا بیس با کمی تغییرات مواجه شده که در ادامه مثالی از آن را با هم خواهیم دید

try
{
    DoWork()
}
catch (Exception ex)
{
    await Log.WriteDatabase(ex);
}

Null Conditional Operator

حتماً شما نیز برنامه نویسی هستید که زیاد چک میکنید که آیا فلان فیلد خالی است یا خیر یا بررسی میکنید که کاربر باید آن فیلد را پر کند سپس به صفحه بعدی برود در این نسخه عملگر ? و ?? برای کوتاه شدن و خلاصه نویسی و راحتی کار اضافه شده است در ادامه ابتدا کد قدیمی و سپس کد نسخه جدید را مشاهده خواهید نمود.

if (employee != null && employee.ContactDetails != null)
{
    Console.WriteLine(employee.Name + "-" + employee.ContactDetails.Address);
}

کد جدید C# 6.0

Console.WriteLine(employee?.Name + "-" + employee?.ContactDetails?.Address?? " No Details");

اگر یادتان باشد ما میتوانستیم و "میتوانیم" از ؟ به صورت if های خلاصه شده و کوتاه به صورت inline استفاده کنیم که مشابه ان دستور را در اینجا خواهیم داشت ، دستور employee?.Name میگوید اگر خاصیت Name برابر با null نباشد مقدار آن را برگردان. چنانچه طرف چپ عملگر ?? برابر با null باشد، آنگاه مقدار سمت راست را برمی‌گرداند. در غیر این صورت همان مقدار سمت چپ برگشت داده می‌شود.

در ادامه سایت های زیر جهت اطلاعات بیشتر خدمتتان معرفی میگردد.


فرهاد خانلری
فرهاد خانلری

کارشناس ارشد شبکه مایکروسافت

فرهاد خانلری ، مدرس شبکه و برنامه نویسی مبتنی بر زیرساخت های مایکروسافت ، سابقه فعالیت در موسسات و مراکز دولتی در قالب پروژه ، مشاوره و تدریس ، برنامه نویسی ++C ، سی شارپ و دات نت ، متخصص و مدرس شبکه های مبتنی بر سیستم عاملهای مایکروسافت و سرویس های مربوطه ، سخت افزار و ...

16 اردیبهشت 1394 این مطلب را ارسال کرده

نظرات