Donc je suis nouveau à C # et j'ai du mal à comprendre out code>. Contrairement à juste à retourner quelque chose d'une fonction
using System;
class ReturnTest
{
static void CalculateArea(out double r)
{
r=5;
r= r * r * Math.PI;
}
static void Main()
{
double radius;
CalculateArea(out radius);
Console.WriteLine("The area is {0:0.00}",radius );
Console.ReadLine();
}
}
5 Réponses :
Quand une variable est concernée et que le retour est correct. Mais que si vous vouliez retourner plus de 1 valeurs? out code> aide à cela.
static void CalculateArea(out double r, out double Foo)
{
//Can return 2 values in terms of out variables.
}
static double CalculateArea(double r)
{
// Will return only one value.
}
Vous pouvez avoir plusieurs paramètres Out, donc si vous devez renvoyer plusieurs valeurs, il est un peu plus facile que de créer une classe spéciale pour vos valeurs de retour. P>
Un bon usage de code> out code> au lieu de L'un des avantages par rapport à retour code> pour le résultat est le modèle
essayer code> modèle que vous pouvez voir dans certaines API, par exemple < Code> int32.tryparse (...) code>. Dans ce modèle, la valeur de retour est utilisée pour signaler le succès ou la défaillance de l'opération (par opposition à une exception), et le paramètre
out> est utilisé pour renvoyer le résultat réel. P>
int32.parse code> est une vitesse, car des exceptions sont évitées. Certaines références ont été présentées dans cette autre question: Performance d'analyse (si, Tryparse, TRY-CATCH ) p>
Seul le temps que j'ai tendance à utiliser out code> est lorsque j'ai besoin de plusieurs choses renvoyées à partir d'une seule méthode.
out code> vous permet d'éviter d'envelopper plusieurs objets dans une classe pour le retour. Découvrez l'exemple sur le Page Microsoft Out a>. p>
Notez que dans les versions récentes de C #, vous pouvez maintenant le faire avec des tuples de valeur. Par exemple (nom de cordes, int ère) getMultiplevalues () {retour ("James", 31); }
Le mot clé code> out code> est utilisé principalement lorsque vous souhaitez revenir plus d'une valeur d'une méthode, sans avoir à envelopper les valeurs d'un objet. P>
Un exemple est la méthode La méthode pourrait renvoyer un objet qui contenait à la fois le booléen et l'entier, mais dont il aurait besoin pour que l'objet soit créé sur le tas, réduisant ainsi les performances de la méthode. P> int32.tryparse code>, qui a à la fois une valeur de retour (un booléen représentant le succès de la tentative), et un paramètre code> code> qui obtient le valeur si l'analyse a été réussie. P>
Je me demande aussi sur la différence de performance (le cas échéant). En provenance d'un environnement C ++, l'argument est que la copie d'un objet lorsqu'elle est renvoyée par la valeur est plus chère. Est-ce également vrai pour C #? Je veux dire si vous construisez un nouvel objet massif dans la fonction et de le renvoyer, est-ce qu'il sera copié à ce que vous cédez? Contrairement à la création de l'objet et à la modifier via le mot clé OUT? Ou est-ce non-pertinence en C #?
@ReaSurria: Si vous créez un objet et que vous le renvoyez, ce n'est que la référence renvoyée, les objets ne sont pas clonés. En .NET Les objets ne sont clonés que si vous les clonez spécifiquement, passez des objets autour de ne pas créer de nouvelles copies.
Etude
Dictionary.trygevalue code> et
int.tryparse VOIR> et voyez si ces exemples expliquent l'utilitaire de
out code>.
out code> est principalement utilisé lorsque vous devez retourner plusieurs valeurs non liées à partir d'une méthode. De plus, il est souvent utilisé pour simuler des pointeurs lorsqu'il est interopé avec un code natif via COM ou P / invoke.
Rappelez-vous en C / C ++, nous avons des pointeurs. Lorsque vous avez passé un pointeur dans une fonction, vous pouvez le modifier dans la fonction et la valeur changerait également dans la fonction d'appel. Sortir à peu près la même chose.
@ carny666: Je pense que
ref code> est plus similaire aux références C ++ que
out code>.
@Kirkwoll C'étaient deux excellents exemples merci!
Dupliqué possible de qui est meilleur, de la valeur de retour ou du paramètre Out? A >