Comment écrivez-vous un C# Méthode d'Extension pour un Générique Tapé Classe
Ce devrait être simple.
Je voudrais ajouter une méthode d'extension pour le Système.Web.Mvc.ViewPage< T > class.
Comment faut-il de la méthode d'extension de look?
Ma première pensée intuitive est quelque chose comme ceci:
namespace System.Web.Mvc
{
public static class ViewPageExtensions
{
public static string GetDefaultPageTitle(this ViewPage<Type> v)
{
return "";
}
}
}
Solution
La solution générale est cette réponse.
La solution spécifique à l'extension du Système.Web.Mvc.ViewPage classe est ma réponse ci-dessous, qui a commencé à partir de la solution générale.
La différence est dans le cas précis, vous avez besoin d'un générique tapé déclaration de méthode ET d'une déclaration à faire respecter le type générique comme un type de référence.
OriginalL'auteur Matt Mitchell | 2008-09-16
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas de VS installé sur ma machine, mais je pense que la syntaxe sera:
OriginalL'auteur David Thibault
Grâce leddt.
Fait qui a produit l'erreur:
qui m'a signalé cette page, qui a abouti à cette solution:
OriginalL'auteur Matt Mitchell
Il faut juste le générique spécificateur de type sur la fonction:
Edit: Juste raté par secondes!
OriginalL'auteur Corey Ross
Vous pouvez aussi avoir besoin/voulez ajouter le "nouveau()" qualificatif pour le type générique (c'est à dire "où T : class, new()" pour faire valoir ce que de T est à la fois un type de référence (classe) et dispose d'un constructeur sans paramètre.
OriginalL'auteur chadmyers
Glenn Bloc a un bon exemple de la mise en œuvre d'un
ForEach
méthode d'extension pourIEnumerable<T>
.De son post de blog:
OriginalL'auteur Eric Schoonover
Si vous voulez que l'extension est uniquement disponible pour le type spécifié
il vous suffit juste besoin de spécifier le type réel vous sera manutention
quelque chose comme...
Note intellisense alors seulement l'affichage de la méthode d'extension lorsque vous déclarez votre (dans ce cas) ViewPage avec le même type.
Également préférable de ne pas utiliser le Système.Web.Mvc espace de noms, je sais que c'est pratique de ne pas avoir à inclure votre espace de noms dans l'usage de la section, mais son beaucoup plus facile à gérer si vous créez vos propres extensions de noms de votre extension de fonctions.
OriginalL'auteur Tim Jarvis
Voici un exemple pour Rasoir vues:
Vous n'avez pas vraiment besoin d'utiliser la version Générique générique on étend le non-générique donc suffit de mettre dans le non-générique de la classe de base et vous avez terminé 🙂
OriginalL'auteur Tod Thomson