developmentcsharp

Currently using statements are for namespaces only. With this new feature they can used for static classes as well. Like this:

using System.IO;
using System.IO.File;

namespace CSharp6Features
{
    class UsingStaticClass
    {
        public class StaticUsing
        {
            public StaticUsing()
            {
                File.WriteAllText("C:\test.txt", "test");
                WriteAllText("C:\test.txt", "test");
            }
        }
    }
}

I don’t think I liked this new feature. If you see a direct method call it feels like it’s a member of that method. But now it’s possible that method can be defined inside a static class somewhere else. I think it would just cause confusion and doesn’t add any benefit.

developmentcsharp

Currently, in Visual Studio 2013, if you have a line like this

public int MyProperty { get;  }

you’d get a compilation error like this:

Getter-only auto-property error

But the same code in VS 2015 compiles happily. The reason to add this feature is to not get in the way of immutable data types.

Another new feature about auto-properties is initializers. For example the following code would compile and run with new C#:

public class AutoInit
{
    public string FirstName { get; } = "Unknown";
    public string LastName { get; } = "Unknown";

    public AutoInit()
    {
        Console.WriteLine(string.Format("{0} {1}", FirstName, LastName));
        FirstName = "Volkan";
        LastName = "Paksoy";
        Console.WriteLine(string.Format("{0} {1}", FirstName, LastName));
    }
}		

and the output is unsurprisingly looks like this:

Auto-property initializer output

When I first ran this code successfully I was surprised how I managed to set values without a setter. Looks like under the covers it’s generating a read-only backing field for the property and just assignning the value to the field instead of calling the setter method. It can easily be seen using a decompiler:

Just Decompile output

As it’s a read-only value it can only be set inside the constructor. So if you add the following method it wouldn’t compile:

public void SetValue()
{
    FirstName = "another name";
}

Auto-property set error

It’s a small improvement providing an alternative way to write the same code in less lines.

developmentcsharp

A new Microsoft

These are exciting times to work with Microsoft technologies as the company seems to be changing their approach drastically. They are open-sourcing a ton of projects including the .NET Framework itself. Maybe the best of it all is the next version of ASP.NET will be cross-platform. There are already some proof of concept projects that run a ASP.NET vNext application on a Raspberry Pi. I like the direction they are taking so I think it’s a good time to catch up with these new instalments of my favorite IDE and programming language.

New features in a nutshell

Looking at the new features it feels like they are all about improving productivity and reducing the clutter with shorthands and less code overall. (It’s also confirmed by Mads Torgersen in his video on Channel 9)

If you check out the resources at the end of the this post you’ll notice that there is quite a flux in the features mentioned in various sources. I’ll use Channel 9 video as my primary source. It features a PM in the language team and it’s the most recent source so sounds like the most credible among all.

Here’s the list of new features:

  1. Auto-Properties with Initializers
  2. Using statements for static classes
  3. String interpolation
  4. Expression-bodied methods
  5. Index initializers
  6. Null-conditional operators
  7. nameof operator
  8. Exception-handling improvements

I was planning to go over all of these features in this post but with sample code and outputs it quickly became quite lengthy so I decided to create a separate post for each of them. Watch this space for the posts about each feature.

Resources