Comment écrire une méthode d'extension pour un type générique avec des contraintes sur les paramètres de type?
Je suis en train de travailler à une tâche spécifique .NET plattform, qui est précompilé et pas OpenSource.
Pour certaines tâches que je dois étendre cette classe, mais pas en héritant de. Je veux simplement ajouter une méthode.
Au premier abord, je veux vous montrer un dummycode classe existante:
public class Matrix<T> where T : new() {
...
public T values[,];
...
}
Je veux prolonger cette classe de la manière suivante:
public static class MatrixExtension {
public static T getCalcResult<T>(this Matrix<T> mat) {
T result = 0;
...
return result;
}
}
J'ai cette syntaxe de nombreux liens google donc aucune idée de savoir si elle est correcte. Le compilateur m'indique pas d'erreur, mais à la fin il ne fonctionne pas. En fin de compte, je tiens à appeler cette fonction de la manière suivante:
Matrix<int> m = new Matrix<int>();
...
int aNumber = m.getCalcResult();
Si quelqu'un a une idée? Merci pour votre aide!
Ce Qui Concerne Les Nem
source d'informationauteur Christoph Meißner
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter le même paramètre de type de contraintes sur la méthode d'extension.
C'est ma tentative de le plus proche de la reconstruction de votre exemple, qui compile et s'exécute, sans aucune erreur:
Droit maintenant, la seule "erreur" j'aimerais voir, c'est ceci:
Vous pouviez changer que:
Dans le cas de types de valeur, ce sera de zéro, de sorte qu'il serait en sécurité.
Cependant, vous allez trouver que c'est difficile quand vous arrivez à la "..." l'article que vous avez énumérées. Les types de base (
int
double
etc) ne pas mettre en œuvre une méthode que vous pouvez utiliser pour le calcul des mathématiques. C'est un longtemps, très très voté demande sur se Connecterbtw.Bien qu'il existe des solutions de contournement, ils rendent la vie très difficile. Contrairement aux modèles en C++, C#'s les génériques ne sont pas vraiment d'un support de type sécuritaire des opérations mathématiques sur des types arbitraires.
Avez-vous regardé dans les "Décorateurs"...
Exemple montrant Décorateur modèles
Un décorateur vous permet de créer une classe avec ses propres propriétés et méthodes sans faire une dérivation directe d'une classe spécifique. Ensuite, vous pouvez "appliquer" il pratiquement n'IMPORTE quel autre objet. Vous pouvez ensuite appliquer utilisez votre extra méthodes ou propriétés que vous essayez de travailler avec.
Cet échantillon a été une simple recherche rapide montrant un exemple en s'attachant aux "voitures" en construisant des "options"...