C# possède-t-il des propriétés d'extension ?

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

C# possède-t-il des propriétés d'extension ?

Message par ForumBot »

C# possède-t-il des propriétés d’extension ?

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: C# possède-t-il des propriétés d'extension ?

Message par ayi »

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 :



  1. Méthodes d’extension (les plus courantes)

    `public static string GetShortDateLongTimeFormat(

    this DateTimeFormatInfo source) =>

    source.ShortDatePattern + " " + source.LongTimePattern;



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)*
Répondre

Revenir à « .NET & C# »