The Future ofC#
Jon Limjap
Microsoft MVP forVisual Studio and DevelopmentTechnologies
Philippine .NET Users Group Lead
About Me
 Microsoft MVP forVisual Studio and
DevelopmentTechnologies
 CTO & Co-Founder, NomadTravlr Inc.
 Lead, Philippine .NET Users Group
 http://jonlimjap.net
 @lattex | jonlimjap@gmail.com
Philippine
.NETUsers
Group
(PHINUG)
facebook.com/groups/phinug
Where is Microsoft today?
Free or paid? Cheap or expensive? Open source or
proprietary? Good or evil?
Exciting times ahead for .NET
.NET FRAMEWORK .NET CORE XAMARIN
APP
MODELS
BASE
LIBRARIES
*
.NET today—app models and libraries
.NET FRAMEWORK .NET CORE XAMARIN
APP
MODELS
BASE
LIBRARIES
.NET today—reusing code
.NET today—challenges
.NET tomorrow
.NET FRAMEWORK .NET CORE XAMARIN
*
.NET tomorrow—reusing code
.NET FRAMEWORK .NET CORE XAMARIN
.NET standard libraries—advantages
.NET future innovation
.NET FRAMEWORK .NET CORE XAMARIN
*
TOOLS
Developed
in the open
http://dotnet.github.io
 http://stackoverflow.com/research/developer-survey-2016#technology-most-popular-technologies
Most popular technologies
 http://stackoverflow.com/research/developer-survey-2016#technology-most-loved-dreaded-and-wanted
Most loved technologies
 http://stackoverflow.com/research/developer-survey-2016#technology-most-loved-dreaded-and-wanted
Most dreaded technologies
Microsoft’s changing tune…
Run onWindows
.NET as system component
Run onVM (CLR)
Black box compilers
Edit inVisual Studio
Proprietary
Run everywhere
Deploy with app
Compile to native
Open compiler APIs
Use your favorite editor
Open source
C# 7
It’s getting funkier every version!
Digit
separators
int bin = 0b1001_1010_0001_0100;
int hex = 0x1b_a0_44_fe;
int dec = 33_554_432;
int weird = 10000_000;
double real = 1_000.111_1e-1_000;
Binary Literals int nineteen = 0b10011;
Ref returns
and Ref Locals
string[] myArray = { "one", "two", "three" };
WriteLine($"The first element of the array is {myArray[0]}");
ref string n = ref FirstElement(myArray);
n = "other"; //myArray[0] now equals "other"
WriteLine($"The first element of the array has become
{myArray[0]}");
Local
Functions
class Program
{
static void Main(string[] args)
{
void testingLocalFunctions()
{
Console.WriteLine("Hello World!");
}
testingLocalFunctions();
}
}
C# 7 features
that are still…
wonky
Tuples
public (int x, int y) Compute(){}
// Call the method
var (x,y) = Compute();
public (int sum, int count) Tally(IEnumerable<int> values)
{
sum = 0; count = 0;
foreach (var value in values) { sum += value; count++; }
return (sum,count);
}
Pattern
Matching
int? age = 5;
if (age is int newVal)
{
Console.WriteLine($"Your age is {newVal}");
}
RecordTypes
//Instead of:
public class Cube
{
public int Width { get; set; }
public int Height { get; set; }
public int Depth { get; set; }
}
//We write this:
public class Cube(int Width, int Height, int Depth)
Philippine
.NETUsers
Group
(PHINUG)
facebook.com/groups/phinug

Donetconf2016: The Future of C#