Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3685 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Interfaces et propriétés : les limites

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Interfaces et propriétés : les limites

n°1379772
_Mose_
Lonesome coder
Posté le 02-06-2006 à 13:22:26  profilanswer
 

Bon... les interfaces m'énervent.
J'ai une interface ITruc qui définie une propriété 'Info' qui retourne une donnée.
J'ai un objet Truc qui l'implémente
Je veux la dériver en :
- TrucFixe qui implémente bètement Truc
- TrucEditable qui enrichie l'interface en autorisant l'accesseur 'set' sur la propriété.
=> Ca compile pas : on n'a pas le droit de faire un override sur une propriété en rajoutant un accesseur
 
Si je fait un 'new' sur la propriété, je perds le polymorphisme : quand je cast mon TrucEditable en Truc et que je récupère la valeur de Info, c'est Truc.Info qui est appelé et pas TrucEditable.Info.
 
RHAAAAAAAAAAAA c'est agaçant :p
 

Code :
  1. public interface ITruc
  2. {
  3. object Info {get;}
  4. }
  5. public class Truc
  6. {
  7. public object Info
  8. {
  9.  get{null;}
  10. }
  11. }
  12. public class TrucFixe : Truc
  13. {
  14. private object ComputeInfo() {...}
  15. public object Info
  16. {
  17.  get{return this.ComputeInfo();}
  18. }
  19. }
  20. public class TrucEditable : Truc
  21. {
  22. private object _info;
  23. public new object Info
  24. {
  25.  get{return this._info;}
  26.  set{this._info = value;}
  27. }
  28. }

mood
Publicité
Posté le 02-06-2006 à 13:22:26  profilanswer
 

n°1379781
toastbeman
L'amour c'est comme la bourse
Posté le 02-06-2006 à 13:31:39  profilanswer
 

Bonjour,
 
En effet cest une particularité si tu veux redefinir un setter et un getter, il faut que dans la classe mére tu definisses aussi le getter et setter !
 
Donc tu mets Un set à rien  !!!
 

Code :
  1. public interface ITruc
  2. {
  3. object Info {get;}
  4. }
  5. public class Truc
  6. {
  7. public object Info
  8. {
  9.  get{null;}
  10.                           set{}
  11. }
  12. }
  13. public class TrucFixe : Truc
  14. {
  15. private object ComputeInfo() {...}
  16. public object Info
  17. {
  18.  get{return this.ComputeInfo();}
  19.                           set{}
  20. }
  21. }
  22. public class TrucEditable : Truc
  23. {
  24. private object _info;
  25. public new object Info
  26. {
  27.  get{return this._info;}
  28.  set{this._info = value;}
  29. }
  30. }


 
Edit: Je ne sais pas si c'est une erreur de past n copy mais ta classe truc n'implemente pas ITruc car il n'ya pas Tru : ITruc


Message édité par toastbeman le 02-06-2006 à 13:43:58
n°1380018
_Mose_
Lonesome coder
Posté le 02-06-2006 à 16:09:36  profilanswer
 

ouaip, t'as raison, c une erreur de copie/paste.
Le set vide ça m'ennuyais beaucoup dans l'esprit, alors j'ai trouvé une autre solution :
 
* le champ est dans la classe de base.
* y'a une méthode 'ComputeInfo' qui est appelé s'il n'a jamais été initialisé, dans le cas où le champs est calculé.
* c'est optimisé dans mon cas, car l'info n'est jamais nulle pour un TrucEditable.
En gros c'est du pseudo-polymorphisme, pour le codeur c'est complètement transparent.
 

Code :
  1. public interface ITruc
  2. {
  3. object Info {get;}
  4. }
  5. public abstract class Truc : ITruc
  6. {
  7. private object _info = null;
  8. public object Info
  9. {
  10.  get
  11.  {
  12.   if(this._info == null)
  13.    this._info = this.ComputeInfo();
  14.   return this._info;
  15.  }
  16. }
  17. protected void SetInfo(object info)
  18. {
  19.  this._info = info;
  20. }
  21. protected abstract object ComputeInfo();
  22. }
  23. public class TrucFixe : Truc
  24. {
  25. protected override object ComputeInfo()
  26. {
  27.  //...
  28. }
  29. }
  30. public class TrucEditable : Truc
  31. {
  32. public TrucEditable(object info)
  33. {
  34.  this.SetInfo(info);
  35. }
  36. public new object Info
  37. {
  38.  get{return base.Info;}
  39.  set{this.SetInfo(value);}
  40. }
  41. protected override object ComputeInfo()
  42. {
  43.  // nada. jamais appelé
  44. }
  45. }


 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Interfaces et propriétés : les limites

 

Sujets relatifs
Propriétés accessibles dans le designerrécup méthodes/propriétés objet javascript
quels sont les limites du c# ? vos petit prjts et progs Perso ?Limites sous visual basic
Propriétés MSComCtl2.DTPicker.2 ?Problème sur les propriétés
vba créer les propriétés d'un commandbutton en automatiqueFaire passer l'animation au dela des limites du document...
[Jsp/Java] Récupérer les propriétés d’une imageChanger dynamiquement des propriétés d'une classe CSS
Plus de sujets relatifs à : Interfaces et propriétés : les limites


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)