Je dispose du code qui calcule la valeur absolue d'un type de valeur personnalisé :
public Angle Abs(Angle agl)
{
return (360 - Angle.Degrees);
}
Ce n'est pas mon application réelle mais cela illustrera mon propos. Ensuite, j'ai une méthode comme ceci :
public dynamic DoStuff(Foo f)
{
// f contient une liste de types de valeur : int, double, decimal, angle
return Abs(f[0]);
}
public dynamic this[int intIndex] // Au sein de la classe Foo
{
get { return Items[intIndex]; }
}
Ma question est la suivante : dans la fonction DoStuff(), comment puis-je surcharger la fonction Abs() pour accepter les types de valeur normaux en utilisant System.Math.Abs(), mais également accepter le type de Angle ?
Des réponses compatibles avec C# 4.0 sont disponibles.
Je suis prêt à avoir une fonction séparée ; quelque chose comme ceci [en supposant que cela fonctionnerait réellement] :
public dynamic Abs(dynamic dyn)
{
if (dyn.GetType() = typeof(Angle))
{
return Abs(dyn);
}
else
{
return System.Math.Abs(dyn);
}
}