نسخه بتاي Visual Studio 2010 و .Net Framework 4.0 از تاريخ 20 May به همراه قابليت هاي جديد و بسيار عالي که ميتواند تمام علاقه مندان خود را هيجان زده کند براي دانلود آماده شده است.(Download)
اما شايد براي علاقه مندان به #C خبر جالب تر اين باشد که به همراه اين دو نرم افزار نسخه جديدي از #C که نسخه 4.0 اين زبان برنامه نويسي است نيز وجود دارد.در اين پست قصد داريم که با هم يک نگاه کلي به گذشته #C داشته باشيم و بعد به اين موضوع بپردازيم که آقاي Anders Hejlsberg و تيم #C در نسخه جديد براي ما چه چيزهايي رو آماده کرده اند:
در سال 1998 پرژه #C با هدف رسيدن به زبان برنامه نويسي آسان ، مدرن ،شيع گرا و Type-Safety که تحت پلت فرم Net. عمل کند شروع به کار کرد. شرکت مایکروسافت پلت فرم Net. را به همراه زبان برنامه نويسي #C در تابستان سال 2000 در اختيار عموم برنامه نويسان قرار داد و روز بعد از آن #C داراي محبوبيت و معروفيت بسياري در بين برنامه نويسان شد.با وجود استقبال بسيار عالي و چشمگيري که از اين زبان برنامه نويسي جديد صورت گرفت ، تا رسيدن به هدف اصلي که شرکت مایکروسافت براي خود مشخص کرده بود راه طولاني در پيش داشت.بعد از مدت کوتاهي نسخه 2.0 تعدادي از نواقص و کمبودها را برطرف کرد که تعدادي از آنها عبارتد از :
در هنگام طراحي ورژن سوم زبان برنامه نويسي #C تاکيد اصلي برروي فعال کردن (LINQ(Language Integrated Query بود که براي اين کار احتياج به موارد زير بود :
براي طراحي نسخه 4.0 زبان برنامه نويسي #C تيم #C از الحام گرفتن از زبان هاي برنامه نويسي Dynamic مانند Perl, Python, and Ruby استفاده کردند.واقعيت اين
است که زبان هاي برنامه نويسي Dynamic و Static داراي مزايا و معايب به خصوص خود هستند و مهم اين
است که بتوان تواناييهاي هر دو را در يکجا جمع کرد.البته قابل به ذکر است که تغييرات و نو آوري هايي که در الگوهاي جديد #C انجام شده به صورت همزمان برروي الگوهاي Net FrameWork. نيز تاثير گذار بوده و باعث تغييراتي بر روي آن بوده است که به اين تغييرات در پست هاي بعدي خواهيم پرداخت.
تعدادي از مهمترين نو آوري ها و ابداعات نسخه جديد #C به همراه مثال در پايين آورده شده است :
-------------------------------
Dynamically Typed Objects.
زمانيکه نوع کلاس Calculator از نوع Static باشد و ما بخواهيم از متد Add اين کلاس استفاده کنيم که مشخص است پارامتر هاي ورودي و مقدار خروجي آن از چه نوعي است اکنون به صورت زير است :
Calculator calc = GetCalculator();
int sum = calc.Add(10, 20);
اما زمانيکه نوع کلاس Calculator از نوع Dynamic باشد و ما بخواهيم از متد Add اين کلاس استفاده کنيم که نوع آن را نميدانيم کد ما به شکل زير ميشود :
object calc = GetCalculator();
Type type = calc.GetType();
object result = type.InvokeMember("Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });
int sum = Convert.ToInt32(result);
حالا در نسخه 4.0 #C کد بالا به اين شکل مي شود :
dynamic calc = GetCalculator();
int result = calc.Add(10, 20);
-----------------------------
Optional and Named Parameters.
زمانيکه شما قصد داشته باشيد در نسخه های موجد متدي داشته باشيد که در موقيت هاي خاصي پارامترهاي ورودي متفاوتي داشته باشه مجبور هستيد به گونه زير عمل کنيد :
public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding, int bufferSize) { }
public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding) { }
public StreamReader OpenTextFile( string path, Encoding encoding) { }
public StreamReader OpenTextFile( string path) { }
اما در نسخه 4.0 زبان #C کد بالا به صورت زير مي شود :
public StreamReader OpenTextFile( string path, Encoding encoding = null, bool detectEncoding = false, int bufferSize = 1024) { }
به زبان بهتر شما مجاز شده ايد که براي پارامترهاي ورودي متد هاي خود مقادير پيش فرض قرار دهيد.
-------------------------------
Improved COM Interoperability.
اگر شما بخواهید که کدی بنویسید که در آن از قبلیت های COM استفاده کنید احتمالاً کد شما چیزی شبیه به کد زیر خواهد بود :
object filename = "test.docx";
object missing = System.Reflection.Missing.Value;
doc.SaveAs(ref filename,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);
اما حال با استفاده از نسخه 4.0 ، #C تمامی خطوط بالا به یک خط به شکل زیر تغییر می کند :
------------------------------------------------------
doc.SaveAs("foo.txt");