Question

assez simple. MSDN indique que vous pouvez utiliser ref, mais pas pour les méthodes partielles. Je suis curieux de pourquoi ? Il a été je crois comprendre que lorsque le code est compilé, les partials sont fusionnés, donc ce qui est avec la restriction? Est-il plus à partial que de simplement faire des fichiers de code plus propre et organisé (c.-à-eyecandy)?

Référence: MSDN article - « méthodes partielles peuvent avoir ref mais des paramètres ."

Était-ce utile?

La solution

Vous devez considérer ce qui se passe si la méthode partielle n'est pas mis en œuvre.

Qu'est-ce qui se passe alors que tous les appels à la méthode est tout simplement dépouillé comme si elles ne se sont passées.

Donc, pour une méthode utilisant dehors, il ressemblerait à ceci:

stream s;
GetStream(out s);
s.Write(...);

et être compilé comme si elle a dit ceci:

stream s;
s.Write(...);

Ce code n'est pas autorisé parce que s n'a pas été initialisé. La garantie que la variable sera initialisé au moment où vous essayez d'appeler la méthode Write sur elle était liée à l'appel à GetStream.

Il est le même avec les méthodes données retour. Depuis l'appel de toute méthode est tout simplement pas compilé si vous ne l'avez pas mis en œuvre la méthode partielle, vous devez considérer ce que vous pouvez et ne pouvez pas faire et laisser encore le code qu'il appelle valide. En termes de valeurs de out et de retour, il a le potentiel de laisser le malade de code d'appel ou incomplet, il est donc pas autorisée.

En ce qui concerne ref, valable depuis l'initialisation a été pris en charge par le code d'appel:

stream s = null;
GetStream(ref s); // may be stripped out
if (s != null)
    s.Write(...);

Autres conseils

Parce que les paramètres ref à la différence, sur les paramètres doivent être initialisées avant le retour de la méthode. Si la méthode partielle n'est pas mis en œuvre (ce qui est un scénario valide) comment peut-il être initialisé?

Je dirais que les paramètres de out ne doivent pas nécessairement être initialisé alors que les paramètres de ref faire.

Si vous avez utilisé un paramètre out sur une méthode partielle, comment C # vérifier que le paramètre a été initialisé ou non?

Un paramètre out suggère que vous voulez une valeur de la méthode. Si la méthode n'existe pas, il ne peut pas fournir cette valeur.

L'alternative serait de définir la valeur de la variable explicitement à sa valeur par défaut (0, null, etc.) au lieu d'exécuter l'appel de méthode. De cette façon, serait encore définitivement initialisé la variable - bien que la valeur par défaut ne peut pas être terriblement utile. Je crois que le C # équipe a examiné ce - il peut même en faire une version future, qui sait? Personnellement, je doute qu'il serait particulièrement utile, mais la possibilité est là.

Pour le moment, vous pouvez toujours utiliser un paramètre ref à la place, et juste initialiser la variable manuellement avant l'appel à ce que la valeur par défaut devrait être.

Je suppose que la raison est parce qu'une méthode partielle avec seulement une signature (à savoir pas de mise en œuvre) est toujours valide. Si vous aviez un paramètre à une méthode d'implémentation moins serait toujours la cause d'une erreur (car il n'y a rien affecter la valeur de sortie)

Une méthode partielle est répartie sur les classes partielles. Un procédé est requis pour affecter une valeur à un paramètre de sortie. méthodes partielles peuvent ou ne peuvent pas être mises en œuvre. Cela signifierait plusieurs morceaux de code essaie de valeur assign au paramètre OUT.

Comme tout le monde a déclaré params out doit être affecté. Pour ajouter cela va générer une erreur du compilateur CS0177 ref d'autre part, doit être attribué avant de faire l'appel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top