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 nærmere 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
13. 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 før lansering.
Man kan til og med bidra på utvikligen av C#!
17. public class User
{
public string Name { get; set; } = "Olav";
}
C# 6.0: Initialisere public properties
Auto-property enhancements
18. public class User
{
private readonly string _name;
public User()
{
_name = "Olav";
}
public string Name
{
get
{
return _name;
}
}
}
Auto-property enhancements
Før: Initialisere readonly properties
19. public class User
{
public string Name { get; } = "Olav";
}
Auto-property enhancements
C# 6.0: Initialisere readonly properties
27. public int Add(int x, int y)
{
return x + y;
}
Før: Enkel metode
Expression bodied function members
public int Add(int x, int y) => x + y;
C# 6.0: Enkel metode
28. public string Name
{
get
{
return FirstName + " " + LastName;
}
}
Før: Property getter
Expression bodied function members
public string Name => FirstName + " " + LastName;
C# 6.0: Property getter
33. 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)));
38. public int ParseIntOrDefault(string numberCandidate)
{
int number;
int.TryParse(numberCandidate, out number);
return number;
}
Før:
Declaration expressions
39. public int ParseIntOrDefault(string numberCandidate)
{
int.TryParse(numberCandidate, out int number);
return number;
}
C# 6.0:
Declaration expressions
41. nameof expressions
public class Person(string name)
{
{
if (name == null)
throw new ArgumentNullException(nameof(name));
}
}
Skriver ut navnet på variabler og metoder.
Gjør det lettere når man skal refaktorere kode.
WriteLine(nameof(Console.WriteLine)); // Skriver "WriteLine"
WriteLine(nameof(Person.Name)); // Skriver "Name"
45. Exception filters
try { ... }
catch (MyException e) if (SomeCondition(e))
{
}
Fang en exception basert på en betingelse
Bedre enn å kaste exception videre, siden stacktracen
blir uberørt.
46. 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;
}
49. Visual Studio 2014 CTP
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
…
<LangVersion>experimental</LangVersion>
</PropertyGroup>
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
50. Følg utvikling av C# 6.0
https://roslyn.codeplex.com/
• Følg status på C# features
• Referat fra designmøter
• Fiks bugs
• Foreslå nye features (vil nok mest sannsynlig bli avvist)
Anders Hejlsberg - mannen bak Turbo Pascal og Delphi
November 2007
Før
C# 6.0
Før
Viktig hvis man skal lage immutable objekter
C# 6.0
Det lages automatisk backing fields for Name propertien.
Ved å fjerne “set;” vil den også markeres som “readonly”
Før
C# 6.0
Primary constructor argumenter lever i et eget scope for initialisering. Man kan ha samme navn på type members.
Samme syntax gjelder også for structs
C# 6.0
Før
C# 6.0
Kan også definere operatorer inline
Før
Før
C# 6.0
- Hvis det man setter ? foran er null, stopper kjeden og returnerer
C# 6.0
Før
C# 6.0
Før
C# 6.0
- Kan også være spesielt nyttig i LINQ-spørringer
Hvis man er MDSN subscriber har man gratis minutter /mnd