5 votes

Y a-t-il une différence pratique entre une méthode d'extension sur <T> ou sur Object ?

Y a-t-il une différence pratique entre ces deux méthodes d'extension ?

class Extensions
{
    public static void Foo<T>(this T obj) where T : class { ... }
    public static void Foo(this object obj) { ... }
}

J'étais en train de fouiller dans Débordement de l'extension et je suis tombé sur la première forme, que je n'ai jamais utilisée auparavant. Je suis curieux de savoir quelle est la différence.

10voto

SLaks Points 391154

Méthodes d'extension sur Object s'appliqueront également aux types de valeurs. (Et ils seront encadrés par l'appel, ce qui réduira les performances).

Méthodes d'extension sur <T> mais sans where T : class fonctionnera également sur les types de valeurs, mais ne les encadrera pas.

En outre, les méthodes d'extension sur <T> peut écrire typeof(T) pour obtenir le temps de compilation type de leur invocation.
Si vous faites cela, notez la différence entre

someButton.Extension();
someButton.Extension<Control>();
someButton.Extension<Object>();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X