ویژگی های جدید در C# 6.0 | هستی پروژه

ویژگی های جدید در C# 6.0

سی شارپ ۶  یک نسخه جدید از #C است که همراه با Visual Studio 2015  عرضه شده است. هدف از ارائه این نسخه از #C سادگی کد نویسی، بهبود ساده سناریوهای برنامه نویسی روزمره بدون اضافه کردن مفاهیم پیچیده دیگر است.این ویژگی ها باید سبکی و کاهش حجم کد نویسی را نمایش داده و  باعث کاهش سنگینی زبان برنامه نویسی گردد.

برخی از ویژگی های جدید شامل (expression-bodied members, string interpolation, name of, getter-only auto-properties) و  نیز گسترش برخی ویژگی های موجود در یک راه طبیعی مثل(using static,index initializer) و برخی ویژگی های دیگر می باشد که در ادامه شما را با هر یک از این ویژگی ها آشنا خواهیم کرد.

 

Auto-property enhancements

شما می توانید در زمان تعریف فیلدهای کلاس یک مقدار static را به عنوان مقدار اولیه به فیلد اختصاص دهید. این مقدار در صورتی که شما در هنگام تعریف یک شی از کلاس هیچ مقداری برای آن فیلد مشخص نکنید به آن فیلد اختصاص داده می شود.

public class Person 
{ 
     public string Name { get; set; } = "Mahmoud";
     public int Age { get; set; } = 20; 
}

Getter-only auto-properties

ویژگی فوق را می توان فقط برای get تعریف کرد و برای set قابل استفاده نمی باشد.

public class Person
{
     public string Name { get;} = "Mahmoud";
     public int Age { get;} = 20;
}

 nameof


گاهی اوقات در برنامه خود نیاز به دسترسی به یک رشته از نام های عناصر برنامه خود دارید برای مثال هنگامی که یک استثناء ArgumentNullException رخ می دهد شما می خواهید نام آرگومانی که باعث وقوع خطا شده را بدست آورید با هنگامی که یک رویداد اتفاق می افتد می توانید نام مشخصه ای که تغییر کرده را به وسیله دستور nameof بدست آورید.

public string DoSomething(string input)
{
     if(input == null)
     {
          throw new ArgumentNullException(nameof(input));
     }
     return input;
} 
	

string interpolation

الحاق رشته ها برای شما امکان قالب بندی رشته ها را فراهم می کند. اگر چه متد string .Format قابلیت های بسیار متنوع و مفیدی را برای شما فراهم می کنند اما استفاده از آنها تا حدی سنگین و مستعد خطا می باشد.برای مثال هنگام نمایش مقدار "{0}" در قالب یک رشته خروجی باعث ایجاد خطا می گردد که برای رفع آن می بایست به صورت "{{0}}" نمایش داد.

var strold = string.Format({0} is {1} year{{s}} old", Person.Name, Person.Age);
var cs6str = $"{Person.Name} is {Person.Age} years old";

قابلیت String interpolation به شما امکان می دهد تا یک عبارت را به صورت مستقیم در جای خود در رشته قرار دهید.همانند متد string.Format نیز می توان برای عبارات قالب و alignment مشخص نمود.

var cs6str = $"{Person.Name, 20} is {Person.Age:D3} years old";

Expression-bodied function members

این ویژگی به Method ها ، Properties و دیگر اعضای داده امکان می دهد که بجای داشتن بلاک کد از یک عبارت مثل lambda expressions استفاده نمایند.

public void print() => Console.WriteLine(FirstName + " " + LastName); 
public double Magnitude => Math.Sqrt(DeltaX * DeltaX + DeltaY * DeltaY);

Index initializers

برای مقدار دهی یک مجموعه اولیه از عناصر مفید درون یک Collection استفاده می گردد برای مثال مقدار دهی اولیه Dictionary ها که باعث صرفه جویی در تعریف کلیدها و از همه مهمتر سادگی درک کد با حذف برخی از آکولاد های اضافی و استفاده از علامت مساوی برای مقدار دهی اولیه به هر کلید استفاده می شود. در زیر یک نمونه ساده آن را مشاهده می نمایید.

Dictionary<string, int> dict = new Dictionary<string, int>
{
     ["a"] = 1,
     ["b"] = 2,
     ["c"] = 3,
};

using static

این ویژگی به شما امکان وارد کردن اعضای static یک نوع داده  را به طور مستقیم به فضای کاری برنامه می دهد.این برای زمانی که شما به یک مجموعه ای از توابع برنامه دائما دسترسی خواهید داشت مناسب است.  کلاس System.Math یک نمونه کلی در این زمینه است.

using static System.Math;
using static System.Console;
using static System.Linq.Enumerable; 
class Program 
{ 
static void Main(string[] args) 
     { 
          WriteLine(Sqrt(4 * 4 + 5 * 5)); 
          WriteLine(Range(1, 20).Count(p => p % 2 == 0)); 
     } 
}

 

دیدگاه خود را به ما بگویید.