Hello,
Pour ne pas changer, j'ai un petit problème de C#
J'ai défini quelque part une série de méthodes surchargées de ce style :
public static class Machin
{
Int32 Methode (A value) { ... }
Int32 Methode (B value) { ... }
Int32 Methode (C value) { ... }
}
Je voudrais ensuite les utiliser au sein d'une classe générique, mettons "MaClasse<T>". Cette classe possède une méthode comme celle-ci :
class MaClasse<T>
{
public void Test (T value)
{
Console.WriteLine (Machin.Methode (value));
}
}
Le problème est que rien ne dit que "Machin.Methode" est valide pour le type T. Par ailleurs je ne peux pas toucher à A, B et C puisque ce sont des types de base comme String, DateTime ou Color.
L'idéal serait d'avoir une contrainte du style "where T in A, B, C", mais à ma connaissance on ne peut pas définir ce type de contrainte en C#. Pour l'instant j'ai donc été obligé de laisser la méthode "Test" abstraite et de définir "MaClasseString : MaClasse<String>", "MaClasseDateTime : MaClasse<DateTime>" et ainsi de suite, mais ça me fait créer tout un paquet de classes qui n'implémentent qu'une seule méthode qui s'écrit rigoureusement de la même façon à chaque fois :
abstract class MaClasse<T>
{
public abstract void Test (T value);
}
class MaClasseString : MaClasse<String>
{
public override void Test (String value)
{
Console.WriteLine (Machin.Methode (value));
}
}
class MaClasseDateTime : MaClasse<DateTime>
{
public override void Test (DateTime value)
{
Console.WriteLine (Machin.Methode (value));
}
}
// ... etc.
Bref, beaucoup de code redondant pour rien. Existe-t-il une solution plus propre ?
Merci ^^