paullut
-
5 août 2012 à 19:59
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 2015
-
7 août 2012 à 11:56
Bonjour à tous,
je cherche a créer une fonction Math.Abs() generique pour tout les types possibles a savoir les types primitifs(int,double)(sa ce n'est pas un soucis vu que Math.Abs le fait déjà) mais aussi pour des types que j'ai créer comme MyNumber ou des type encore inconnu creation à venir (c'est la que sa coince) comment faire pour créer cette classe generique.
Si quelqu'un à une idée qu'il me la fasse parvenir.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201548 7 août 2012 à 11:56
Salut
Deux solutions
- Soit tu crées autant de méthodes Abs que tu as de types (quitte à tout mettre dans la même méthode et faire un switch sur le type de l'objet transmis en paramètre) - méthode pas très propre, pas très pratique
- Soit tu crées une interface te permettant de calculer la valeur absolue (soit en mettant une méthode Abs dans ton interface, soit en mettant des getters sur les propriétés nécessaires pour le calcul de la valeur absolue, que tu codes à côté)
Premier exemple :
public static MaClasse Abs(MaClasse monObjet)
{
if (monObjet.MaValeur < 0)
{
return new MaClasse(-monObjet.MaValeur);
}
else
{
return new MaClasse(monObjet.MaValeur);
}
}
Premier exemple bis :
public static T Abs<T>(T monObjet)
{
switch (typeof(T))
{
case typeof(MaClasse):
if (((MaClasse)monObjet).MaValeur < 0)
{
return new (T)(MaClasse(-((MaClasse)monObjet).MaValeur));
}
else
{
return new (T)(MaClasse(((MaClasse)monObjet).MaValeur));
}
break;
}
}
Deuxième exemple :
public interface IAbsolutable<T>
{
T GetAbs<T>();
}
public class MaClasse : IAbsolutable<MaClasse>
{
public MaClasse GetAbs()
{
if (this.MaValeur < 0)
{
return new MaClasse(-this.MaValeur);
}
else
{
return new MaClasse(this.MaValeur);
}
}
}
PS : Je n'ai pas relu mon code ni ne l'ai testé. C'est possible qu'il y ait des erreurs.
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -