2010-03-25 10 views
0

S'il vous plaît aidez-moi ici parce que je suis un peu confus .. J'ai un formulaire dans un projet Winforms C# et quelques méthodes qui sont prévues pour effectuer certaines tâches pour ce formulaire particulier et tous dérivés ceux, donc une de ces méthodes auxiliaires peut faire l'exemple .. celui-ci devrait remplir des comboboxes avec un ensemble de données. Son bon fonctionnement maintenant, mais quand je la méthode avec codé cette signaturePasser des références de contrôle comme paramètres ref

protected void FillComboBox(kComboBox target, IEntClass_DA entity) 
     { 
      target.DataSource = entity.GetList().Tables[0]; 
      target.DisplayMember = "name"; 
      target.ValueMember = "id"; 
     } 

je vis que le DisplayMember et ValueMember dans les listes déroulantes ne tenaient pas les valeurs après l'appel de méthode. Je pensais juste que je devrais utiliser des paramètres ref afin que les asignements ne soient pas gaspillés dans des variables de référence en lecture seule. C'était correct d'ici là, mais plus tard, en faisant un exercice de passer le formulaire entier en tant que paramètre, j'ai été averti par le compilateur avec la remarque que cela ne pouvait pas être passé comme paramètre ref parce qu'il est en lecture seule. Bon alors, je continue de travailler et je vois que même sans le mot clé ref, je peux utiliser la variable ref du formulaire, mettre à jour certaines propriétés et voir les changements.

Alors qu'est-ce qui se passe ici: passer une référence du contrôle à la méthode d'assistance me donne la possibilité de changer ses membres même si vous n'utilisez pas le paramètre ref?

Merci.

+0

Ok, donc clair .. pas besoin de paramètres ref lors du passage des types de référence. Je pensais que ce serait peut-être en train de passer en mode lecture seule. Merci beaucoup! – Enmanuel

Répondre

6

Votre dernière déclaration est absolument correcte. Vous passez une référence au contrôle; vous pouvez modifier le contenu de ce contrôle via la référence, mais si vous modifiez la valeur du paramètre pour faire référence à un contrôle différent entièrement, ce changement ne sera pas propagé au code appelant.

Voir my article on parameter passing pour plus de détails sur cette zone généralement mal comprise.

+0

votre site est bloqué sur notre réseau. Pouvez-vous élaborer ici? –

+0

@softwareisfun: Pas vraiment - essayez http://jonskeet.uk/csharp/parameters.html (qui est ce que redirige vers). –

2

Vous passez un type de référence, donc il devrait y avoir le même résultat si vous utilisez ou non ... ref