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