Fonctionnalités syntaxiques
Inférence de type
C# supporte l'inférence de type pour les variables locales avec le mot clé var, exemple :
var hello = "Hello world";
A utiliser uniquement lorsque le type est évident (constructor ou littéral).
Interpolation de chaine
C# supporte l'interpolation de chaine avec $, exemple :
var firstName = "John";
var lastName = "Shepard"
var fullName = $"{firstName} {lastName}";
Console.WriteLine(fullName); // Prints John Shepard
Opérateurs ? et ??
Nullabilité
Un type suivi de ? signfie que le type est nullable. En cas d'assignation de null à un type qui n'est pas déclaré comme nullable, le compilateur produit un warning. Exemple :
int nonNullableNumber= 42;
nonNullableNumber = null; // warning de compilation
int? nullableNumber = 42;
nullableNumber = null; // pas de warning de compilation
Ternaires
decimal ticketPrice = age >= 18 ? 10 : 6;
Equivalent :
decimal ticketPrice;
if(age >= 18){
ticketPrice = 10;
} else {
ticketPrice = 6
}
Accès conditionné par null
Permet de conditionner l'accès à un champs ou l'appel d'une méthode par la non présence d'une valeur null sur la référence sur laquelle on effecture l'appel. Exemple :
User? user = GetUser();
string? name = user?.Name;
Equivalent :
User? user = GetUser();
string? name;
if(user is not null){
name = User.Name;
}
null-coallescing
Valeur de repli en cas de valeur null :
User user = GetUser() ?? new User("John Shepard");
Equivalent :
User? temp = GetUser();
User user;
if(temp is not null){
user = temp;
} else {
user = new User("John Shepard");
}
Méthodes "Expression Body"
public class Point2D {
private int x;
private int y;
public Point2D(int x, int y){
this.x = x;
this.y = y;
}
public Point Move(int distanceX, int distanceY) => new Point(x + distanceX, y + distanceY);
}
Intialisation
Propriétés d'objets
var employee = new Employee{ FirstName = "John", LastName = "Shepard"};
Equivalent :
var employee = new Employee();
employee.FirstName = "John";
employeeLastName = "Shepard";
Collections
Listes / Tableaux
var list = new List<string> { "Item1", "Item2", "Item3" }
Dictionnaires
var map = new Dictionnary<int,string> {
[42] = "Item1",
[41] = "Item2",
[123] = "Item3"
}
Méthodes d'extensions
Les méthodes d'extensions permettent de rajouter des méthodes aux types qu'on ne controle pas (ex : classes de la Base Classes Library (BCL) ou des librairies qu'on utilise). Cela requiert de créer une classe static, et les méthodes d'exension doivent prendre en premier paramètre une argument du type étendu, avec le mot clé this. Exemple :
public static class Extensions {
public static void Multiply(this string stringToMultiply, int times){
return String.Concat(Enumerable.Repeat(stringToMultiply, times));
}
}
Surcharge d'opérateurs
En C#, les opérateurs du langage (+, -, *, etc...) peuvent être redéfinis :
public static Fraction operator +(Fraction a, Fraction b)
=> new Fraction(a.num * b.den + b.num * a.den, a.den * b.den);
No comments to display
No comments to display