Vous êtes sur la page 1sur 6

An Introduction to New Features in C# 5.0 - The Microsoft MVP Award Program Blog - ...

Page 1 of 6

An Introduction to New Features in C# 5.0


MVP Award Program 26 Mar 2012 10:07 AM

20

Introduction of New Features in C# 5.0

1. C# Evolution Matrix Microsoft just published a new version of C# : 5.0 beta with CLR version 4.5 (Visual Studio 11 beta). In order to get a big picture of the whole evolution of C# language, I summarized all the key features into a C# Evolution Matrix for your reference as below diagram shows:

In C# version 5.0, there are two key features: Async Programming and Caller Information. 2. Async Feature Two new key words are used for Async feature: async modifier and await operator. Method marked with async modifier is called async method. This new feature will help us a lot in async programming. For example, in the programming of Winform, the UI thread will be blocked while we use HttpWebRequest synchronously request any resource in the Internet. From the perspective of user experience, we cannot interact with the form before the request is done. private void btnTest_Click(object sender, EventArgs e) { var request = WebRequest.Create(txtUrl.Text.Trim()); var content=new MemoryStream(); using (var response = request.GetResponse()) { using (var responseStream = response.GetResponseStream())

http://blogs.msdn.com/b/mvpawardprogram/archive/2012/03/26/introduction-of-new-featu... 5/25/2012

An Introduction to New Features in C# 5.0 - The Microsoft MVP Award Program Blog - ... Page 2 of 6

{ responseStream.CopyTo(content); } } txtResult.Text = content.Length.ToString(); }

In the above example, after we clicked the Test button, we cannot not make any change to the form before the txtResult textbox shows the result. In the past, we can also use BeginGetResponse method to send async request as this sample in MSDN shows: http://msdn.microsoft.com/zh-cn/library/system.net.httpwebrequest.begingetresponse(v=vs.80).aspx. But it will takes us a lot effort to realize it. Now, we can simply use below code to do request asynchronously : private async void btnTest_Click(object sender, EventArgs e) { var request = WebRequest.Create(txtUrl.Text.Trim()); var content = new MemoryStream(); Task<WebResponse> responseTask = request.GetResponseAsync(); using (var response = await responseTask) { using (var responseStream = response.GetResponseStream()) { Task copyTask = responseStream.CopyToAsync(content); //await operator to supends the excution of the method until the task is completed. In the meantime, the control is returned the UI thread. await copyTask; } } txtResult.Text = content.Length.ToString(); } The await operator is applied to the returned task. The await operator suspends execution of the method until the task is completed. Meanwhile, control is returned to the caller of the suspended method.

http://blogs.msdn.com/b/mvpawardprogram/archive/2012/03/26/introduction-of-new-featu... 5/25/2012

An Introduction to New Features in C# 5.0 - The Microsoft MVP Award Program Blog - ... Page 3 of 6

3. Caller Information Caller Information can help us in tracing, debugging and creating diagnose tools. It will help us to avoid duplicate codes which are generally invoked in many methods for same purpose, such as logging and tracing. We could get the below information of caller method : CallerFilePathAttribute Full path of the source file that contains the caller. This is the file path at compile time. CallerLineNumberAttribute Line number in the source file at which the method is called. CallerMemberNameAttribute Method or property name of the caller. Below example are a common practice prior to the new feature of Caller Information: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplicationTest { class Program { static void Main(string[] args) { InsertLog("Main"); MethodB(); Console.ReadLine(); } static void MethodA()

{ InsertLog("MethodA"); MethodB(); } static void MethodB()

{} static void InsertLog(string methodName) { Console.WriteLine("{0} called method B at {1}", methodName, DateTime.Now); }

http://blogs.msdn.com/b/mvpawardprogram/archive/2012/03/26/introduction-of-new-featu... 5/25/2012

An Introduction to New Features in C# 5.0 - The Microsoft MVP Award Program Blog - ... Page 4 of 6

} } In both Main and MethodA methods, method InsertLog is invoked for logging. Now we can change the codes to be as per below lines: using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; namespace ConsoleApplicationTest { class Program { static void Main(string[] args) { //InsertLog("Main"); MethodB(); Console.ReadLine(); } static void MethodA()

{ //InsertLog("MethodA"); MethodB(); } static void MethodB( [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) { InsertLog(memberName); } static void InsertLog(string methodName) { Console.WriteLine("{0} called method B at {1}", methodName, DateTime.Now);

http://blogs.msdn.com/b/mvpawardprogram/archive/2012/03/26/introduction-of-new-featu... 5/25/2012

An Introduction to New Features in C# 5.0 - The Microsoft MVP Award Program Blog - ... Page 5 of 6

} } } 4. Summary The new features in C# 5.0 will help us to code more easily and improve the productivity. Have a nice experience with the new release of Visual Studio 11!

Author's Bio
Fahao Tang, Visual C# MVP, majored in Environment Engineering. In 2008, he joined Microsoft MSDN forums and became a moderator one year later. Through these forums, he helped a lot of users to resolve all kinds of questions and issues. In 2012, he successfully joined one of the GSO hubs of the Australia and New Zealand Banking Group in Chengdu. The new role as Senior MIS Developer as well as the youngest senior developer in the department, brings him alot challenges with opportunities. Beside the improvement in work, he alsohelped to organize offline technique sharing meetings. He is currently a programmer andan information participator and initiator. MVP Mondays The MVP Monday Series is created by Melissa Travers. In this series we work to provide readers with a guest post from an MVP every Monday. Melissa is a Community Program Manager for Dynamics, Excel, Office 365, Platforms and SharePoint in the United States. She has been working with MVPs since her early days as Microsoft Exchange Support Engineer when MVPs would answer all the questions in the old newsgroups before she could get to them.

Comments
Patel Rikin2 Apr 2012 6:27 AM

Nice overview of C# lang. with Visual studio... thks....

Srinivas5 Apr 2012 9:16 PM

Nice ones, thanks

San6 Apr 2012 4:01 AM

thanks for the ready info.....

Jim6 Apr 2012 4:30 AM

Nice article. Awful formatting, though. Some block formatting of the code examples would be nice.

Diljith9 Apr 2012 3:30 AM

Nice one... Expect detail explanations in future

Sat9 Apr 2012 8:42 PM

Thanks for info

rajachowdary10 Apr 2012 1:03 AM

Good Info !

http://blogs.msdn.com/b/mvpawardprogram/archive/2012/03/26/introduction-of-new-featu... 5/25/2012

An Introduction to New Features in C# 5.0 - The Microsoft MVP Award Program Blog - ... Page 6 of 6

noor12 Apr 2012 11:28 PM

good explaination with simple examples, really liked it :))

jtwine15 Apr 2012 5:57 AM

When posting articles that contain code, please take the time to ensure that things like the code snippets and samples are formatted correctly. Some of the information you are trying to communicate gets lost when trying to read through the code and there are places where comments are broken into multiple lines, so it looks like article content in the middle of the code sample. It is also hard to see where article text ends and a code snippet/sample begins, and vice-versa. Thanks! -=- James.

RKamal17 Apr 2012 5:50 PM

Good overview - Thanks! Rashed

Dave Black18 Apr 2012 4:31 AM

Thanks for the article. I understand the need/benefit for the 'async' and 'await' keywords, however I think your example of their usage is not the best. You could easily accomplish an async/non-blocking operation on a WinForm using a BackgroundWorker thread.

Geetha19 Apr 2012 7:47 AM

Good Article

Mustafa20 Apr 2012 5:51 AM

Every personal site supports code formatting for user readability. Why Microsoft doesn't?

Kiran Kurapaty25 Apr 2012 7:35 AM

Thanks for sharing. Very useful overview.

Vijay Byreeddy 30 Apr 2012 10:27 AM

Asyn operations in 5.0 is outstanding feature.The performance of Application should be increased;

http://blogs.msdn.com/b/mvpawardprogram/archive/2012/03/26/introduction-of-new-featu... 5/25/2012

Vous aimerez peut-être aussi