C # a out
et ref
mots - clés. Pourquoi ces deux nécessaires? Avertissement: je n'ai pas une connaissance approfondie de C #.
18
C # a out
et ref
mots - clés. Pourquoi ces deux nécessaires? Avertissement: je n'ai pas une connaissance approfondie de C #.
ref
etout
? Ou demandez-vous quelle est l'utilisation des arguments par référenceref
/out
par rapport aux arguments par valeur (pas de modification du paramètre)? Ou les deux?Réponses:
En termes d'implémentation, ils sont essentiellement la même chose, mais
out
communiquent quelque chose quiref
ne le fait pas: vous ne vous souciez pas de l'entrée. Cela signifie certaines choses pour vous et pour l'outillage. Par exemple, vous pouvez passer une variable non initialisée à unout
paramètre et ce n'est pas un problème, sinon ce serait le cas, et dans la fonction, vous devez attribuer une valeur auout
paramètre avant qu'il ne revienne, alors qu'il n'y a aucune obligation de faire quoi que ce soit à le tout avec uneref
valeur.la source
out
il donne un moyen de le faire , qui permet une meilleure adéquation la façon dont vous voulez traiter avec des variables , en premier lieu.out
paramètre car la fonction qui la reçoit ne va pas la lire .Pour comprendre ces deux mots - clés, vous aurez besoin de comprendre ce que le passage d' une valeur de référence moyen. Essentiellement , cela signifie que, si vous modifiez la variable de paramètres que vous passez dans la méthode ou la fonction, cette variable conserve sa valeur modifiée quand vous sortez de fonction. La déclaration
ref
ou l'out
accomplissement d' un paramètre , alors qu'une variable de paramètre ordinaire conserverait sa valeur d'origine, même si vous l'avez modifié dans la fonction.Les seules différences entre
ref
etout
est queout
ne vous oblige pas à initialiser la variable avant de passer dans la fonction, maisref
ne; enout
fait vous avez besoin d'attribuer quelque chose à la variable au sein de la fonction, maisref
ne fonctionne pas.la source
Tu as demandé.
Et la réponse est qu'ils ne sont pas tenus, Java, par exemple, ne pas non plus et VB ne dispose que d'arbitre (et il faut que dans la déclaration de méthode).
Vous pouvez facilement écrire un programme complet sans utiliser non plus.
Ils existent parce qu'ils sont parfois pratique. Quelle est la raison pour laquelle il y a deux d'entre eux et pas seulement un - parce qu'il est utile de faire la distinction entre « ici est quelque chose, modifiez-le si vous voulez » et «donner cette chose une nouvelle valeur.
D'autres langues ont des priorités différentes et peuvent donc ou non les inclure ou leur équivalent. Ils peuvent même en désaccord si non est utile, et ainsi peut décider activement de ne pas mettre en place un ou l'autre.
la source
À la fois
ref
, ilsout
fournissent un mécanisme pour transmettre l'adresse d'une variable à une méthode afin qu'elle puisse être mise à jour - l'affectation au paramètreref
ouout
met à jour la variable dans le contexte de l'appelant. Ces chercheurs se distinguent dans les garanties:out
garantir que la variable est mise à jour,ref
ne fonctionne pas.De l'autre côté de l'appel, il existe des différences similaires. Un
out
paramètre à notre méthode n'est pas garanti pour contenir quelque chose d' utile à l' arrivée et doit être réglé sur une valeur à un moment donné, alors qu'unref
paramètre peut être censé avoir une valeur et nous ne particulier pas besoin de quoi que ce soit là- dedans.Cette différence a des impacts sur l 'analyse de code, la production et l'optimisation lequel, alors que pas très évident pour nous la plupart des cas, peut avoir des effets sur la manière dont nos programmes finissent exploitation. Le générateur de code peut différer l'allocation de la variable jusqu'à immédiatement avant l'appel, l'optimiseur peut décider qu'il peut réorganiser certaines opérations plus efficacement en fonction du contrat, etc.
En termes d'utilisation: en règle générale , j'utilise dans
out
des situations où je ne me soucie pas du contenu de la variable quand il arrive un paramètre etref
quand je fais.la source