0% found this document useful (0 votes)
47 views38 pages

What's New in C#

The document discusses new features in C# 6.0 including getter-only auto-properties that allow automatic properties without setters, initializers for auto-properties that allow initializing auto-properties inline, using static classes to call static methods without an instance, and string interpolation for easy string formatting.

Uploaded by

abc123dragonskin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
47 views38 pages

What's New in C#

The document discusses new features in C# 6.0 including getter-only auto-properties that allow automatic properties without setters, initializers for auto-properties that allow initializing auto-properties inline, using static classes to call static methods without an instance, and string interpolation for easy string formatting.

Uploaded by

abc123dragonskin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 38

Whats new in C# 6.

0
Mads Torgersen
Language PM for C#

Design philosophy
No big new concepts
Many small features
Clean up your code

Getter-only auto-properties


public class Point
{
public int X { get; set; }
public int Y { get; set; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Math.Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}

Getter-only auto-properties


public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Math.Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}

Getter-only auto-properties


public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Math.Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}

Initializers for auto-properties




public class Point
{
public int X { get; } = 5;
public int Y { get; } = 7;
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Math.Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}

Using static classes


using System.Math;

public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Math.Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}

Using static classes


using System.Math;

public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Math.Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}

Using static classes


using System.Math;

public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}

String interpolation
using System.Math;

public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}

String interpolation
using System.Math;

public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return "(\{X}, \{Y})";
}
}

Expression-bodied methods
using System.Math;

public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return "(\{X}, \{Y})";
}
}

Expression-bodied methods
using System.Math;

public class Point
{
public int X { get; }
() => { return "(\{X}, \{Y})"; }
public int Y { get; }

public Point(int x, int y) { X = x; Y = y; }
() => "(\{X}, \{Y})"


public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return "(\{X}, \{Y})";
}
}

Expression-bodied methods
using System.Math;

public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString() => "(\{X}, \{Y})";
}

Expression-bodied properties
using System.Math;

public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString() => "(\{X}, \{Y})";
}

Expression-bodied properties
using System.Math;

public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist => Sqrt(X * X + Y * Y);
public override string ToString() => "(\{X}, \{Y})";
}

Expression-bodied properties
using System.Math;

public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist => Sqrt(X * X + Y * Y);
public override string ToString() => "(\{X}, \{Y})";
}

Index initializers
public class Point
{
public int X { get; }
public int Y { get; }

public JObject ToJson()
{
var result = new JObject();
result["x"] = X;
result["y"] = Y;
return result;
}
}

Index initializers
public class Point
{
public int X { get; }
public int Y { get; }

public JObject ToJson()
{
var result = new JObject() { ["x"] = X, ["y"] = Y };
return result;
}
}

Index initializers
public class Point
{
public int X { get; }
public int Y { get; }

public JObject ToJson()
{
return new JObject() { ["x"] = X, ["y"] = Y };
}
}

Index initializers
public class Point
{
public int X { get; }
public int Y { get; }

public JObject ToJson() =>
new JObject() { ["x"] = X, ["y"] = Y };
}

Null-conditional operators
public static Point FromJson(JObject json)
{
if (json != null &&
json["x"] != null &&
json["x"].Type == JTokenType.Integer &&
json["y"] != null &&
json["y"].Type == JTokenType.Integer)
{
return new Point((int)json["x"], (int)json["y"]);
}
return null;
}

Null-conditional operators
public static Point FromJson(JObject json)
{
if (json != null &&
json["x"]?.Type == JTokenType.Integer &&
json["y"]?.Type == JTokenType.Integer)
{
return new Point((int)json["x"], (int)json["y"]);
}
return null;
}

Null-conditional operators
public static Point FromJson(JObject json)
{
if (json != null &&
json["x"]?.Type == JTokenType.Integer &&
json["y"]?.Type == JTokenType.Integer)
{
return new Point((int)json["x"], (int)json["y"]);
}

?.

return null;
}

Null-conditional operators
public static Point FromJson(JObject json)
{
if (json != null &&
json["x"]?.Type == JTokenType.Integer &&
json["y"]?.Type == JTokenType.Integer)
{
return new Point((int)json["x"], (int)json["y"]);
}
return null;
}

Null-conditional operators
public static Point FromJson(JObject json)
{
if (json?["x"]?.Type == JTokenType.Integer &&
json?["y"]?.Type == JTokenType.Integer)
{
return new Point((int)json["x"], (int)json["y"]);
}
return null;
}

Null-conditional operators





OnChanged(this, args);

Null-conditional operators



if (OnChanged != null)
{
OnChanged(this, args);
}

Null-conditional operators

{
var onChanged = OnChanged;
if (onChanged != null)
{
onChanged(this, args);
}
}

Null-conditional operators





OnChanged?.Invoke(this, args);

The nameof operator



public Point Add(Point point)
{
if (point == null)
{
throw new ArgumentNullException("point");
}
}

The nameof operator



public Point Add(Point other)
{
if (other == null)
{
throw new ArgumentNullException("point");
}
}

The nameof operator



public Point Add(Point point)
{
if (point == null)
{
throw new ArgumentNullException(nameof(point));
}
}

The nameof operator



public Point Add(Point other)
{
if (other == null)
{
throw new ArgumentNullException(nameof(other));
}
}

Exception filters

try
{

}
catch (ConfigurationException e)
{

}
finally
{

}

Exception filters

try
{

}
catch (ConfigurationException e) if (e.IsSevere)
{

}
finally
{

}

Await in catch and finally



try
{

}
catch (ConfigurationException e) if (e.IsSevere)
{
await LogAsync(e);
}
finally
{
await CloseAsync();
}

Learn more at


roslyn.codeplex.com

You might also like