ویژگی‌های جدید در C# 6 - بخش اول

C# 6 قرار است همراه با Visual Studio 2014 عرضه شود. مطابق معمول مایکروسافت ویژگی‌هایی را در این نسخه به کامپایلر و زبان#C اضافه نموده که برخی از کاربردی‌ترین این ویژگی‌ها در زیر آمده است:

۱. بهبود پراپرتی‌ها

۱-۱. ایجاد  Initializerبرای پراپرتی‌های خودکار

public class Customer
{
    public string First { get; set; } = "Mohsen";
    public string Last { get; set; } = "Ali";
}

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

۲-۱. پراپرتی‌های فقط خواندنی

می‌توان یک پراپرتی با مقداردهی‌اولیه فقط خواندنی ایجاد کرد:

public class Customer
{
    public string First { get; } = "Mohsen";
    public string Last { get; } = "Ali";
}

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

public class Customer
{
    public string Name { get; };
    public Customer(string first, string last)
    {
         Name = first + " " + last;
    }
}

۲. سازنده‌های اولیه (Primary Constructors)

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

۱-۲. پارامترها در classها و structها

در زیر یک مثال از کلاس با سازنده اولیه آمده است:

public class Customer(string first, string last)
{
    public string First { get; } = first;
    public string Last { get; } = last;
}

۲-۲. بدنه‌ی کد سازنده‌های اولیه

هرچند ارسال پارامترها در روش بیان شده ساده‌تر از روش‌ پیشین در#C است اما بدون نوشتن کد در داخل بدنه سازنده این ویژگی چندان کارایی نخواهد داشت. برای این منظور در C# 6 نوشتن بدنه‌ی سازنده نیز از طریق ایجاد دو آکولاد در داخل کلاس امکان پذیر است:

public class Customer(string first, string last)
{
    {
       if (first == null) throw new ArgumentNullException("first");
       if (last == null) throw new ArgumentNullException("last");
    }
    public string First { get; } = first;
    public string Last { get; } = last;
}

۳-۲. سازنده‌های صریح (Explicit)

یک کلاس تعریف شده با یک سازنده اولیه می‌تواند سازنده‌های دیگری را نیز داشته باشد (همان سازنده‌های صریح پیشین). اما برای اطمینان از اینکه پارامترهای سازنده اولیه مقداردهی می‌شوند باید همه‌ی سازنده‌های دیگر عبارت ()this را صدا بزنند:

public Point() : this(0, 0) {} // سازنده اولیه را فراخوانی می‌کند

سازنده‌های صریح مانند قبل می‌توانند یکدیگر را فراخوانی کنند ولی به‌طور مستقیم یا غیرمستقیم سازنده اولیه را فراخوانی ‌می‌کنند. (مثل زمانی که یک سازنده ()base را فراخوانی می‌کند).

۴-۲ راه‌انداز‌های Base

یک سازنده‌ اولیه به صورت صریح یا غیر صریح، همیشه یک راه‌انداز base را فراخوانی می‌کند. در صورتی که را‌ه‌انداز base ی تعیین نشده باشد، درست مثل بقیه سازنده‌ها یک سازنده base بدون پارامتر پیش‌فرض را فراخوانی ‌میکند.

روش فراخوانی صریح راه‌انداز‌ base این است که یک آرگومان به یک کلاس base ارسال کنیم:

class BufferFullException() : Exception("Buffer full") { … }

۳. استفاده از Expression در اعضای متدها

۱-۳. متدها

متدها می‌توانند با استفاده از عبارات Lambda بدنه خود را تکمیل کنند:

public Point Move(int dx, int dy) => new Point(x + dx, y + dy); 

در صورتی که خروجی متد void باشد، عبارت پس از پیکان باید یک عبارت باشد:

public void Print() => Console.WriteLine(First + " " + Last);

۲-۳ پراپرتی‌ها و ایندکسرها

برای استفاده از عبارات lambda در پراپرتی‌ها و ایندکسرها باید آنها فقط خواندنی باشند و بدنه آنها توسط عبارات lambda مقدار دهی شده باشد:

public string Name => First + " " + Last;
public Customer this[long id] => store.LookupCustomer(id); 

توجه کنید که در اینجا از get استفاده‌ای نشده است و به صورت ضمنی در syntax عبارت موجود است.

۴. تعریف کلاس‌های static در بخش using و استفاده از اعضای آنها 

با استفاده از این ویژگی می‌توان کلاس‌های static را در بخش using معرفی و از تمام اعضای static آنها بدون ذکر نام کلاس بهره‌برد. کلاس System.Math یک نمونه‌ی پرکاربرد این مورد است:

using System.Console;
using System.Math;
class Program
{
   static void Main()
   {
      WriteLine(Sqrt(3*3 + 4*4)); 
   }
}
  • Book.mark.hu
  • co.mments
  • De.lirio.us
  • del.icio.us
  • Digg
  • DotNetKicks
  • E-Mail
  • Facebook
  • feedmelinks
  • Google
  • LinkedIn
  • msdn Social
  • MyShare
  • Slashdot
  • StumbleUpon
  • TwitThis
  • Tumblr
  • Yahoo! Buzz
  • Yahoo! MyWeb
  • Print
امکان ارسال نظر برای این موضوع وجود ندارد