Vi hade personligen blivit tipsade av Mads Torgersen (program manager för C#) att hans och Dustin Campbells session "The future of C#" skulle vara en av konferensens "mest bokade". Lätt att förstå baserat på dess innehåll och väldigt underhållande och kompetenta speakers. Dustin inledde sessionen med en genomgång av "Roslyn" den nya kompilatorn för C# och Visual Basic och hur man kan styra och programmera denna för att enkelt kunna förändra beteendet hos språken. Dustin visade även hur enkelt man kan styra Visual Studio genom den nya kompilatorplattformen, mer om detta i senare inlägg.

Mads påvisade i sin session hur Microsoft fokuserar på att göra språket C# mer kortfattat samt en ännu mer funktionell programstil och features såsom:

  • Primary Constructors
  • Readonly auto properties
  • Static type using statements
  • Property Expressions (property lambdas)
  • Method expressions
  • Params for enumerables
  • Monadic null checking
  • Constructor type parameter inference
using System; using System.Text; 
using System.Threading.Task; // import types into namespace using System.Math;

// primary constructor 
public class Point(int x, int y) { 
   // readonly property 
   public int X { get; } = x; 
   public int Y { get; } = y;
 
   // property expressions 
   public double Dist => Sqrt( X * X, Y * Y );

   // method expressions 
   public Point Move(int dx, int dy) => new Point(X + dx, Y + dy);

   // parameter arrays for IEnumerable 
   public static Point Avg(params IEnumerable<Point> points) { 
      // monadic null checking 
      if (points?.FirstOrDefault()?.X ?? -1 ) 
   }

   public void GetCoordinates(out int x, out int y) { x = X; y = Y; } 
} 

Mina personliga favoriter här är tilldelning av "readonly auto properties" och "monadic null checking". Autoproperties har gjort livet surt för immutable-klasser något som nu förenklas. Många kommer säkert beklaga sig över lite krånglig syntax i "monadic null checking" men vinsten är stor i minskad kodmassa för denna typ av kontroll och därmed minskad risk för null reference exceptions.

En mycket glädjande nyhet som ligger utanför ovanstående områden är att framtida C# kommer ha möjligheten till await innanför ett catch block. Detta lär underlätta mycket hantering av exempelvis asynkrona loggingsanrop.