[C# 2] Héritage et spécialisation de méthodes template

Héritage et spécialisation de méthodes template [C# 2] - C#/.NET managed - Programmation

Marsh Posté le 12-06-2006 à 16:13:37    

Bonjour,
 
Je souhaite spécialiser des méthodes d'une classe de base dans des classes dérivées.
Voici ma classe de base :

Code :
  1. public class A
  2. {
  3.   virtual public void DefiniMaValeur<TypeVal>(TypeVal val)
  4.   {
  5.     throw new Exception("Pas implémentée" );
  6.   }
  7. }


Exemple de classe dérivée que je voudrais :

Code :
  1. public class B : A
  2. {
  3.   int _val;
  4.   public override void DefiniMaValeur<Boolean>(Boolean val)
  5.   {
  6.     _val = (val)?1:0;
  7.   }
  8.   public override void DefiniMaValeur<String>(String val)
  9.   {
  10.     _val = Int.Parse(val);
  11.   }
  12. }


Et ainsi je pourrais faire quelque chose comme ce qui suit :

Code :
  1. list<A> maListe = new list<A>();
  2. maListe.Add(new B());
  3. ...
  4. foreach (A in maListe)
  5. {
  6.   A.DefiniMaValeur<String>(maValeurStr);
  7. }


Sachant qu'il y aurait plusieurs classes dérivée de la classe A.
 
Merci de votre aide et de vos commentaires.


Message édité par bb138 le 12-06-2006 à 16:23:54
Reply

Marsh Posté le 12-06-2006 à 16:13:37   

Reply

Marsh Posté le 12-06-2006 à 17:59:09    

N'insistez pas... je pense que ce n'est pas faisable...
Ce n'est pas faisable en C++ (à moins que je me trompe) alors je ne pense pas que cela puisse être le cas en C#.
 
Merci à vous tout de même !

Reply

Marsh Posté le 30-06-2006 à 10:33:25    

Tu fait un virtual qui prend un object dans ta classe de base
et apres quand tu overrides tu fais un switch case sur le type... [:sinclaire]
 

Code :
  1. public class A
  2. {
  3.   virtual public void DefiniMaValeur(object pVal)
  4.   {
  5.     throw new Exception("Pas implémentée" );
  6.   }
  7. }
  8. public class B : A
  9. {
  10.   int _val;
  11.   public override void DefiniMaValeur(object pVal)
  12.   {
  13.     switch(pVal.GetType())
  14.     {
  15.       case typeof(bool):
  16.         _val = (val)?1:0;
  17.         break;
  18.       case typeof(String):
  19.         _val = Int.Parse(val);
  20.         break;
  21.       default:
  22.         throw new Exception("Type pas supporté!" );
  23.         break;
  24.     }
  25.   }



---------------
██████████████████████████████████
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed