c# 6.0 introduction

51
C#6.0 Olav Haugen Åpen fagkveld - Webstep - 9.10.2014

Upload: olav-haugen

Post on 21-Jun-2015

302 views

Category:

Technology


2 download

DESCRIPTION

An introduction to the C# 6.0 programming language

TRANSCRIPT

  • 1. 6.0 Olav Haugen pen fagkveld - Webstep - 9.10.2014

2. C-like Object Oriented Language 1999 Anders Hejlsberg etablerer et team som skal lage Cool 3. .NET blir annonsert. "Cool" har endret navn til C 2000 Mye nrmere C++ i design PDC Klone av java Mangel p innovasjon Andy! 4. C# 1.0 blir lansert sammen med .NET 1.0 og Visual Studio .NET 2002 2002 5. C# 2.0 blir lansert sammen med .NET 2.0 og Visual Studio 2005 2005 Generics Partial types Anonymous methods Iterators Nullable types Getter/setter separate accessibility Method group conversions (delegates) Co- and Contra-variance for delegates Static classes 6. C# 3.0 blir lansert sammen med .NET 3.5, LINQ og Visual Studio 2008 2007 Implicitly typed local variables Object and collection initializers Auto-Implemented properties Anonymous types Extension methods Query expressions Lambda expressions Expression trees Partial methods 7. C# 4.0 blir lansert sammen med .NET 4.0 og Visual Studio 2010 2010 Dynamic binding Named and optional arguments Generic co- and contravariance Embedded interop types ("NoPIA") 8. C# 5.0 blir lansert samme med .NET 4.5 og Visual Studio 2012 2012 Asynchronous methods Caller info attributes 9. 2014 C# 6.0 blir lansert uten noen features? 10. C# 6.0 Auto-property enhancements Primary constructors Expression bodied function members Initializers in structs Using static Exception filters Declaration expressions Nameof expressions Null-conditional operators Index initializers Await in catch and finally blocks Binary literals and digit separators Extension Add methods in collection initializers Improved overload resolution 11. Roslyn .NET compiler blir open source https://roslyn.codeplex.com/ 12. 2014 3. juni Visual Studio 2014 CTP 8. juli Visual Studio 2014 CTP 2 18. aug Visual Studio 2014 CTP 3 6. okt Visual Studio 2014 CTP 4 C# 6.0 og .NET tilgjengelig for community fr lansering. Man kan til og med bidra p utvikligen av C#! 13. 6.0 14. Auto-property enhancements 15. Auto-property enhancements public class User { public User() { Name = "Olav"; } public string Name { get; set; } } Fr: Initialisere public properties 16. public class User { public string Name { get; set; } = "Olav"; } C# 6.0: Initialisere public properties Auto-property enhancements 17. public class User { private readonly string _name; public User() { _name = "Olav"; } public string Name { get { return _name; } } } Auto-property enhancements Fr: Initialisere readonly properties 18. public class User { public string Name { get; } = "Olav"; } Auto-property enhancements C# 6.0: Initialisere readonly properties 19. Primary constructors 20. public class User { private string firstName; private string lastName; public User(string firstName, string lastName) { this.firstName = firstName; this.lastName = lastName; } } Fr: Primary constructors 21. public class User(string firstName, string lastName) { private string firstName = firstName; private string lastName = lastName; } C# 6.0: Primary constructors 22. Primary constructors public class User(string name) { { if (name == null) { throw new ArgumentNullException("name"); } } private string name = name; } C# 6.0: Constructor bodies 23. public class User { private readonly string _firstName; private readonly string _lastName; public User(string firstName, string lastName) { _firstName = firstName; _lastName = lastName; } public string FirstName { get { return _firstName; } } public string LastName { get { return _lastName; } } } Primary constructors Fr: Sette readonly properties 24. public class User(string firstName, string lastName) { public string FirstName { get; } = firstName; public string LastName { get; } = lastName; } C# 6.0: Sette readonly properties Primary constructors 25. Expression bodied function members 26. public int Add(int x, int y) { return x + y; } Fr: Enkel metode Expression bodied function members public int Add(int x, int y) => x + y; C# 6.0: Enkel metode 27. public string Name { get { return FirstName + " " + LastName; } } Fr: Property getter Expression bodied function members public string Name => FirstName + " " + LastName; C# 6.0: Property getter 28. Null-conditional operators 29. public string GetFirstUserName(IEnumerable customers) { if (customers != null) { var customer = customers.FirstOrDefault(); if (customer != null) { if (customer.Users != null) { var user = customer.Users.FirstOrDefault(); if (user != null) { return user.Name; } } } } return null; } Fr: Null-conditional operators 30. TO THE RESCUE! 31. public string GetFirstUserName(IEnumerable customers) { return customers?.FirstOrDefault()?.Users?.FirstOrDefault()?.Name; } C# 6.0: Null-conditional operators 32. C# 6.0: Null-conditional operators // Null hvis users er null int? numberOfUsers = users?.Length; // Null hvis users er null User first = users?[0]; // Chaining int? numberOfOrders = users?[0].Orders?.Count(); // Et nytt pattern? PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(X))); 33. Using static 34. using System; class Program { static void Main() { Console.WriteLine("Hello world!"); } } Fr: Using static 35. using System.Console; class Program { static void Main() { WriteLine("Hello world!"); } } C# 6.0: Using static 36. Declaration expressions 37. public int ParseIntOrDefault(string numberCandidate) { int number; int.TryParse(numberCandidate, out number); return number; } Fr: Declaration expressions 38. public int ParseIntOrDefault(string numberCandidate) { int.TryParse(numberCandidate, out int number); return number; } C# 6.0: Declaration expressions 39. nameof expressions 40. nameof expressions public class Person(string name) { { if (name == null) throw new ArgumentNullException(nameof(name)); } } Skriver ut navnet p variabler og metoder. Gjr det lettere nr man skal refaktorere kode. WriteLine(nameof(Console.WriteLine)); // Skriver "WriteLine" WriteLine(nameof(Person.Name)); // Skriver "Name" 41. Binary literals & digit separators 42. Binary literals and digit separators var bits = 0b0010_1110; var hex = 0x00_2E; var dec = 1_234_567_890; ker lesbarheten p bits, hex og tall 43. Exception filters 44. Exception filters try { ... } catch (MyException e) if (SomeCondition(e)) { } Fang en exception basert p en betingelse Bedre enn kaste exception videre, siden stacktracen blir uberrt. 45. Exception filters Kan ogs (mis?)brukes til logging try { ... } catch (MyException e) if (Log(e)) {} public bool Log(Exception e) { // Logg exception // Returner false for at exception ikke catches return false; } 46. Jeg m prve C# 6.0 N! 47. .NET Fiddle C# 6.0 rett i nettleseren 48. Visual Studio 2014 CTP experimental Rediger .csproj-fil for aktivere C# 6.0: Last ned: http://www.visualstudio.com/en-us/downloads/visual-studio-14-ctp-vs.aspx Ogs tilgjengelig ferdiginstallert i Azure sitt Virtual Machine Gallery 49. Flg utvikling av C# 6.0 https://roslyn.codeplex.com/ Flg status p C# features Referat fra designmter Fiks bugs Foresl nye features (vil nok mest sannsynlig bli avvist) 50. [email protected]