C# possède-t-il des propriétés d’extension ?
Source : [Stack Overflow](What's new in C# 14 | Microsoft Learn](What's new in C# 14 | Microsoft Learn)
C# possède-t-il des propriétés d’extension ?
Source : [Stack Overflow](What's new in C# 14 | Microsoft Learn](What's new in C# 14 | Microsoft Learn)
Oui ! (16 ans plus tard)
Depuis C# 14, les membres d’extension sont officiellement supportés, y compris les propriétés d’extension.
Vous pouvez maintenant écrire des propriétés d’extension en utilisant la nouvelle syntaxe de bloc extension :
`using System.Globalization;
public static class DateTimeFormatInfoExtensions
{
extension (DateTimeFormatInfo source)
{
public string ShortDateLongTimeFormat =>
source.ShortDatePattern + " " + source.LongTimePattern;
}
}
Cette propriété peut être utilisée exactement comme une propriété d'instance normale :
`var format = CultureInfo.InvariantCulture.DateTimeFormat;
var value = format.ShortDateLongTimeFormat;
Ce qui est inclus
Propriétés d’extension
Méthodes d’extension
Regroupement de membres d’extension sans classes statiques
Syntaxe plus propre que les méthodes d’extension classiques
Cette fonctionnalité fait partie de C# 14, qui est livré avec .NET 10 / Visual Studio 2026.
Documentation officielle :
https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-14#extension-members
Solutions de contournement avant C# 14
Avant C# 14, les propriétés d’extension n’étaient pas supportées par le langage, et plusieurs solutions de contournement existaient :
Cela fonctionne mais nécessite la syntaxe d'appel de méthode au lieu de l'accès par propriété.
2. TypeDescriptor / ConditionalWeakTable
Il était possible d'attacher des données dynamiquement à l'exécution en utilisant `TypeDescriptor` ou `ConditionalWeakTable`, mais cette approche :
- Ne s'intègre pas avec le compilateur
- N'est pas un simple sucre syntaxique
- A des performances et un outillage limités
3. Réécriture post-compilation
Des outils comme **PostSharp** ou **Mono.Cecil** peuvent injecter des propriétés après la compilation.
Cependant, cela empêche le compilateur de comprendre l'intention et limite l'optimisation.
Un peu d'histoire
Ext
*(Réponse tronquée)*