Acces a une liste : parametre ou publique

Résolu
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 - 18 févr. 2008 à 08:37
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 19 févr. 2008 à 11:01
Bonjour

Désolé j'ai encore une question de debutant en ool et C#

Dans une form j'ai définis une liste

   List AddrLst = new List();


Ensuite j'appelle une autre form avec cette liste
    Form formxxx = new Xxx.XxxForm(AddrLst);

Et puis j'utilise cette liste


    public XxxForm(List<TestMysql.MainForm.AddrList> AddrLst)
    {
      InitializeComponent();
      if (null != AddrLst)
      {
        BuildCityListFromAddr(AddrLst);
      }
    }

Jusque là tout va bien SAUF que je me rends compte que j'ai besoin de cette liste a différents endroit dans les classes et fonctions exploitée par cette autre form

Donc je me dis que le plus facile ce serait d'avoir cette liste accessible publiquement plutot que de la trimbaler em parametre
Donc je me demande comment le faire proprement
Suffit-il de la declarer publique ?

public   List AddrLst = new List();

Ai je posté cette question dans la bonne rubrique ?
Sinon quelle est elle ?

Merci

8 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
18 févr. 2008 à 23:13
C'est un problème d'architecture et pas de C# ça 
C'est difficile d'y répondre sans avoir le projet sous la main, mais de passer des paramètres (constructeur, property, etc) me paraît une solution assez bonne (si ça s'enchaîne vraiment trop, il serait alors peut-être bon de revoir les classes et l'idée général du programme).

Mettre en public, c'est généralement une mauvaise solution.
Le champs static peut être utile selon le besoin... à voir.

<hr />
-My Blog-
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
18 févr. 2008 à 10:21
Salut,
Si ton objet fait partie de la classe (j'entends par là qu'il est non static) alors tu devras effectivement le trimballer partout où tu en a besoin.
Sinon tu peux le déclarer static (avec le mot clef static...) dans ce cas il sera accessible en faisant seulement MaClass.maVariable (pour autant qu'elle soit publique).
Mais bon, il ne faut pas mettre tout et n'importe quoi en static, on arrive vite à des problèmes de design de l'application et surtout à une programmation qui n'est plus objet....

<hr />
-My Blog-
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
18 févr. 2008 à 10:51
Merci Bidou

Precisement, j'essaye de prendre des bonnes habitudes
Donc j'essaye de m'appuyer sur vos conseils
Et ce n'est pas encore bien clair

Ci apres
1- Ma déclaration
2- L'appel de Form2 depuis Form1
3- L'usage dans Form2

Mon probleme c'est que form2 instancie une autre classe qui fait appel a une fonction qui appelle une autre fonction (dans la meme classe) qui elle aurait besoin de ma Liste

Et ca devient un peu profond car j'utilise une source qui n'est pas de moi, que je commence a connaitre mais qui vehicule des concept que je ne maitrise pas encore bien.

      ThreadPool.QueueUserWorkItem(new WaitCallback(BeginTsp));
etc..

Quelle est la maniere la plus propre de faire pour avoir la visibilité de cette liste ?

// 1 Ma declaration ----------------------
namespace RecuTour
{
  public partial class MainForm : Form
  {
// Declaration de la liste des adresses
    public struct AddrList
    {
      public int AddrId;
      public int X;       // X ecran
      public int Y;       // Y ecran
      public int order;
      public bool active;
    };
    public List AddrLst = new List();


    public class AddrListIdComparer : IComparer
    {
      public int Compare(AddrList a, AddrList b)
      {
        return a.AddrId - b.AddrId;
      }
    };

2- L'appel
      Form tspx = new Tsp.TspForm(AddrLst);
      tspx.Show();

3- L'usage initial
    public TspForm(List<RecuTour.MainForm.AddrList> AddrLst)
    {
      InitializeComponent();
      if (null != AddrLst)
      {
        BuildCityListFromAddr(AddrLst);
      }
    }
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
18 févr. 2008 à 21:24
Euh, je regrette je ne comprends pas vraiment la question....

<hr />
-My Blog-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
18 févr. 2008 à 22:06
Excuse moi je vais essayer d'etre plus clair ou de mieux exprimer mon niveau d'incompétenca actuelle !

J'ai déclaré une liste dans une form (liste pas publique pour le moment)

J'appelle une autre form en donnant cette liste en parametre
Cette autre form appelle une fontion on pazssant cette meme liste et tout va bien

MAIS : Cette ute forme instancie une classe  qui contient différentes methodes


La methode A appelle la methode B qui elle devrait avoir aussi la visibilité de la liste et ppeut etre ailleurs encore .....


Je me demande si mon option de passer la liste en parametre etait la bonne ou si je ne devrait pas plutot essayer de rendre cette liste publique, et c'est la que je fais azppel a ta science pour connaitre ton avis sur la maniere la plus simple mais pas trop cracra de proceder !
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
18 févr. 2008 à 23:48
Ok je vais passer en mode manuel et immersion profonde !


 


J'apprends l'architecture objet !
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
19 févr. 2008 à 10:51
Bonjour Bidou

Ne te fache pas mais je suis encore confronté a ce probleme d'architecture et de déclaration

En définitive pour avancer j'ai opté pour la declaration statique.
Mais vraissemblablement, ca ne suffit pas je dois AUSSi declarer public ??

Voici ma declaration dans la forme principale
    public static List AddrLst = new List();

Voici mon utilisation dans une des classe exploitée par la form secondaire
    List<RecuTour.MainForm.AddrList> A = RecuTour.MainForm.AddrLst;

Ca ca marche !! mais uniquement si je declare la liste public et static
Ai je fait une erreur conceptuelle qq part ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 févr. 2008 à 11:01
Sans public, la liste n'est pas visible en dehors de la classe...
Il faut donc mettre un public dans ce cas oui.

<hr />
-My Blog-
0
Rejoignez-nous