هنوز چند بایت مونده که پیدا کنم...

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

1. نوع static به صورت using

همه ما با نوع static آشنا هستیم، و اینو می دونیم که اگه کلاسی از نوع static تعریف کردیم باید اعضای داخلی آن هم از این نوع باشند. مثلا، قبلا برای دسترسی به متد های ()ReadKey و یا ()WriteLine، که در کلاس Console و از نوع static هست، استفاده می کردیم. الان دیگه به این نیازی نداریم. می تونیم از using static استفاده کنیم، که خیلی به صرفه تر هم هست.
 
قبل از C# 6.0
using System;

namespace OldCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Writer.GetFirstName();
            Console.ReadKey();
        }
    }

    static class Writer
    {
        public static void GetFirstName()
        {
            Console.WriteLine("فاطمه");
        }
    }
}

/* Output: فاطمه */
 
در C# 6.0
using static System.Console;       /* New in C# 6.0 */
using static NewCSharp.Writer;     /* New in C# 6.0 */

namespace NewCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            GetFirstName();
            ReadKey();
        }
    }

    static class Writer
    {
        public static void GetFirstName()
        {
            WriteLine("فاطمه");
        }
    }
}

/* Output: فاطمه */
 

2. اتصال رشته ها

برای اتصال رشته ها معمولا در درون رشته ها از علامت {}، که به ترتیب متغییرهایی که داریم از صفر شروع می کنیم و در آخر متغییرها رو جایگزین می کنیم. اما در ورژن جدید، به جای شماره گذاری، متغییرها رو همون لحظه در آکولادها صدا میزنیم، فقط برای اینکار، باید قبل از رشته از علامت $ استفاده کنیم، به همین راحتی.
 
قبل از C# 6.0
using System;
using System.Collections.Generic;
using static System.Console;

namespace OldCSharp
{
    class Program
    {
        private static void Main(string[] args)
        {
            string fullName = "فاطمه حسین پور";
            string nickName = "فاطی";

            WriteLine("{0} هستم، همه مرا({1}) صدا می زنند!", fullName, nickName);

            ReadLine();
        }
    }   
}

/* Output: فاطمه حسین پور هستم، همه مرا فاطی صدا می زنند! */
 
در C# 6.0
using System;
using System.Collections.Generic;
using static System.Console;

namespace NewCSharp
{
    class Program
    {
        private static void Main(string[] args)
        {
            string fullName = "فاطمه حسین پور";
            string nickName = "فاطی";
            			
            WriteLine($"{fullName} هستم، همه مرا({nickName}) صدا می زنند!");     /* New in C# 6.0 */

            ReadLine();
        }
    }   
}

/* Output: فاطمه حسین پور هستم، همه مرا فاطی صدا می زنند! */
 
یه نمونه از مهمترین کاربرد این روش
string name = "فاطمه حسین پور";
double credit = 1000;
double price = 2000;

double remaining = credit - price;     // remaining = -1000

WriteLine($"{name} در سایتی، {credit} تومان اعتبار دارد، کالایی به قیمت {price} تومان خرید کرده است."); 
WriteLine($"الان {name} 
{(remaining > 0 ? "بدهکار" : "بستانکار")};

/*Output: 
	فاطمه حسین پور درسایتی، 1000 تومان اعتبار دارد، کالایی به قیمت 2000 تومان خرید کرده است.
	الان فاطمه حسین پور بدهکار است.
*/
 

3. مقداردهی اولیه Dictionary

این ساختاری {"Key", "Value"} بود در  C# 5، برای مقداردهی دیکشنری ها استفاده میشد. اما در ورژن جدید، از این ساختار ;"Key"] = "value"]، استفاده می شود، که کد خواناتر از روش قبلی می شود.
 
قبل از C# 6.0
using System.Collections.Generic;
using static System.Console;

namespace OldCSharp
{
    class Program
    {
        private static void Main(string[] args)
        {
            var MonthDictionary = new Dictionary<string, string>
            {
                { "1", "فروردین" },
                { "2", "اردیبشهت" },
                { "3", "خرداد" },
                { "4", "تیر" },
                { "5", "مرداد" },
                { "6", "شهریور" },
                { "7", "مهر" },
                { "8", "آبان" },
                { "9", "آذر" },
                { "10", "دی" },
                { "11", "بهمن" },
                { "12", "اسفند" }
            };

            foreach (var month in MonthDictionary)
            {
                WriteLine(month.Key + " : " + month.Value + "\n");
            }

            ReadLine();
        }
    }   
}

/*Output: 
	1 : فروردین
	2 : اردیبشهت
	.
	.
	.
	12 : اسفند
*/
 
در C# 6.0
using System.Collections.Generic;
using static System.Console;

namespace NewCSharp
{
    class Program
    {
        private static void Main(string[] args)
        {
            /* The new C# 6.0 and friendly syntax */ 
            var MonthDictionary = new Dictionary<string, string>
            {
                ["1"] = "فروردین",
                ["2"] = "اردیبشهت",
                ["3"] = "خرداد",
                ["4"] = "تیر",
                ["5"] = "مرداد",
                ["6"] = "شهریور",
                ["7"] = "مهر",
                ["8"] = "آبان",
                ["9"] = "آذر",
                ["10"] = "دی",
                ["11"] = "بهمن",
                ["12"] = "اسفند"
            };

            foreach (var month in MonthDictionary)
            {
                WriteLine(month.Key + " : " + month.Value + "\n");
            }

            ReadLine();
        }
    }   
}

/*Output: 
	1 : فروردین
	2 : اردیبشهت
	.
	.
	.
	12 : اسفند
*/
 

4. مقداردهی خودکار خصوصیت ها (Property)

در C# 6.0، برای مقداردهی اولیه خصوصیت های یک کلاس، به صورت خطی اینکار انجام میشه، درصورتی که در ورژن های قبلی برای مقداردهی خصوصیت ها باید در کلاس سازنده مقداردهی انجام میشد.
یکی دیگه مزیت های این روش اینه که اگه ما بخوایم، یه خصوصیت فقط قابلیت دسترسی (Getter) داشته باشه، می تونیم همون لحظه مقدار اون خصوصیت رو مشخص کنیم. ;)
 
قبل از C# 6.0
using static System.Console;

namespace OldCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            User newUser = new User();

            WriteLine("FirstName: " + newUser.FirstName + "\nLastName: " + newUser.LastName);

            ReadKey();
        }
        public class User
        {
            public string FirstName { get; set; } 
            public string LastName { get; set; }
			
	    /* Constructor */
            public User()
            {
            	/* Initializing property through constructor */
            	FirstName = "فاطمه";
                LastName = "حسین پور"; 
            }
        }
    }
}
 
در C# 6.0
using static System.Console;

namespace NewCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            User newUser = new User();

            WriteLine("FirstName: " + newUser.FirstName + "\nLastName: " + newUser.LastName);

            ReadKey();
        }
        public class User
        {
            /* Getter only property with inline initialization */
            public string FirstName { get; } = "فاطمه";
            
            /* Property with inline initialization */
            public string LastName { get; set; } = "حسین پور"; 
        }
    }
}
نویسنده : فاطمه حسین پور
یکشنبه 8 آذر 1394
+ 20 -

خوشحال میشیم نظرتُ بدونیم