تغییر 1 : Auto Property Initializer
در این نسخه از سی شارپ میتوان زمان تعریف یک Property برای آن یک مقدار اولیه تخصیص داد. در نسخههای قبلی این کار را در سازنده کلاس میشد انجام داد.
[csharp] public class Employee
{
public Guid EmpId {get;set;}
public Employee()
{
EmpId = Guid.NewGuid();
}
} [/csharp]
|
کد C# 6.0 :
[csharp] public class Employee
{
public Guid EmpId {get;set;} = Guid.NewGuid();
public string FullName {get;} = "Ahmad Ghaffari";
} [/csharp]
|
تغییر 2 : Expression-bodied Members
چنانچه شما یک متد یا یک Property داشته باشید که فقط دارای یک خط دستور باشد میتوانید به جای علائم {} از => استفاده کنید.
کد نسخههای قبلی (نمونه متد) :
[csharp] public void ShowName()
{
Console.WriteLine(person.FirstName);
} [/csharp]
|
کد نسخههای قبلی (Property) :
[csharp] public string FullName {get { return person.FirstName + " " + person.LastName;}} [/csharp]
|
کد C# 6.0 :
نمونه متد
[csharp] public void ShowName() => Console.WriteLine(person.FirstName); [/csharp]
|
نمونه خاصیت (Property)
[csharp] public string FullName => person.FirstName + " " + person.LastName; [/csharp]
|
تغییر 3 : Using Static Class import
در این نسخه قابلیتی اضافه شده است که میتوان کلاسهای از نوع static را نیز در لیست usingها قرار داد. در نسخههای قبلی این امکان وجود نداشت.
مثال:
[csharp] using System.Console;
class Program
{
static void Main(string[] args)
{
WriteLine("Ahmad Ghaffari");
}
}
public string FullName {get;} = "Ahmad Ghaffari";
} [/csharp]
|
تغییر 4 : Exception Filters
با استفاده از این قابلیت میتوان بر روی استثنائاتی که رخ میدهند فیلترهایی را اعمال کنیم. به عنوان مثال شرطی را بررسی نماییم که در صورت برقرار بودن آن، دستورات catch اجرا شود.
به if های جلوی catch دقت نمایید.
مثال:
[csharp] try
{
throw new MyException { Severity = 3};
}
catch (MyException ex) if (ex.Severity == 2)
{
WriteLine("In dasturat ejra nakhahad shod");
}
catch (MyException ex) if (ex.Severity == 3)
{
WriteLine("In dasturat ejra khahad shod");
} [/csharp]
|
تغییر 5 : String Interpolation
این امکان در رابطه با رشتهها میباشد و برای الحاق آنها کاربرد دارد. در مثال زیر روش استفاده از این قابلیت نشان داده شده است.
کد نسخههای قبلی :
[csharp] //1)
string fullName = "Ahmad Ghaffari";
Console.WriteLine("Full Name is " + fullName);
//2)
string name = "Ahmad";
string family = "Ghaffari";
Console.WriteLine("Full Name is {0} {1}", name, family); [/csharp]
|
کد C# 6.0 :
[csharp]
//1)
string fullName = "Ahmad Ghaffari";
Console.WriteLine("Full Name is \{fullName}");
//2)
string name = "Ahmad";
string family = "Ghaffari";
Console.WriteLine("Full Name is \{name} \{family}");
[/csharp]
همان طور که مشاده میکنید میتوان اسم متغیر را بعد از علامت \ داخل {} نوشت.
تغییر 6 : Dictionary Initializer
مقداردهی به ساختماندادههای از نوع دیکشنری به گونهای تغییر یافته که قابل فهمتر میباشد.
کد نسخههای قبلی :
[csharp]
Dictionary<string, string> eplTeams = new Dictionary<string, string>()
{
{"Arsenal", "ARS"},
{"Burnley", "BUR"},
{"Manchester United", "MUN"}
};
[/csharp]
کد C# 6.0 :
[csharp]
Dictionary<string, string> eplTeams = new Dictionary<string, string>()
{
["Arsenal"] = "ARS",
["Burnley"] = "BUR",
["Manchester United"] = "MUN"
};
[/csharp]
تغییر 7 : Null Conditional Operator
یکی از مواردی که در کدهایمان معمولا زیاد بررسی میشود، null بودن یا نبودن میباشد. در این نسخه، عملگر ? و ?? برای مختصر شدن این بررسیها اضافه شده است.
کد نسخههای قبلی :
[csharp] if(emp != null && emp.ContactDetails != null)
{
Console.WriteLine(emp.Name + " – " + emp.ContactDetails.Address);
}
[/csharp]
|
کد C# 6.0 :
[csharp] Console.WriteLine(emp?.Name + " – " + emp?.ContactDetails?.Address ?? "No Details"; [/csharp]
|
این یک خط کد نوشته شده معادل دستورات نوشته شده در بالا میباشد.
دستور emp?.Name دارای این مفهوم میباشد که اگر خاصیت Name برابر با null نباشد مقدار آن را برگردان.
چنانچه طرف چپ عملگر ?? برابر با null باشد، آنگاه مقدار سمت راست را برمیگرداند. در غیر این صورت همان مقدار سمت چپ برگشت داده میشود. به مثال زیر توجه کنید.
[csharp] x = a ?? b; [/csharp]
|
اگر a برابر با null باشد آنگاه x = b در غیر این صورت x = a خواهد شد.
14 دیدگاه
سید محمد حسین موسوی
سلام
بیشتر ما فقط دنبال بروز کردن نرم افزارهامون هستیم بدون اینکه بدونم چه امکاناتی بهش اضافه شده
این طور پست ها خیلی می تونه کمک کنه تا بتونیم از امکانات جدید استفاده کنیم بخصوص این که مثال هم داره
خیلی ممنون
سید علی سیدنژاد جوپاری
سلام
ممنون از مقاله خوبتون لطفا در مورد ASP.NET MVC هم مقالات جدید قرار بدید
تشکر
مهدی ربانی ذبیحی
ممنون از مقاله بسیار خوبتون
سید عماد آرمون
سلام
در مورد تغییر 5 فک کنم اشتباه کردین
کد C# 6 عین کد تغییر 6 هست
فرید طاهری
سلام دوست عزیز
با تشکر از دقت شما، اصلاح گردید.
فرشید علی اکبری
سلام
محمدحسین
سلام
خدا قوّت و وقت بخیر به فعالانِ نیک آموز
من قبلاً در وبینارتون این جمله رو گفتم باز هم می گم این کارِ شما فوق العاده است که جدیدترین ها رو ارائه می دین ، شما درهارد سیستم ، لپ تاب و تبلت من مکانی دارین با آدرس و نام NikAmooz اما مهم تر از اون در قلب و زبانِ من هست که روزی به چند نفر معرفی می شین.
شما فوق العاده این ، به خاطر اینکه جدیدترین ها رو به بهترین شکل آموزش می دین.
یاعلی.
mohsen
واقعا عالی بود
مجتبی شهریور
مرسی خلیی عالی بود
جمال کاکسوری
یکی دیگه از تغییراتی که بنده در حین کار مشاهدش کردم استفاده از متغییر دالر بجای string.format بود.
کد در سی شارپ قدیمی : string.Format(“{0}-{1}”, FirstName, LastName);
کد در سی شارپ 6 : string resault = $”{FirstName}-{LastName}”;
MEHDI
سلام سی شارپ 6 میشه چه نسخه ای از ویژوال استدیو 2013 یا 2015؟
فرید طاهری
سلام دوست عزیز
سی شارپ 6 مربوط به VS.NET 2015 است
زهرا شکری
با سلام
مقاله مفیدی بود. اگه امکان داره در مورد append کردن فایل در #C هم توضیح بدید.
با تشکر
جواد
سلام آقای غفاری ببخشید یک سوال ازتون داشتم
میشه شارژ مودم جی اس ام رو توی یک برنامه گرفت و نمایش داد؟اگه کدش رو دارید و امکانش هست بذارید
خیلی ممنون