Comment pouvez-vous transmettre des références en C#?Comment passer des références en tant qu'arguments dans une méthode en C#
Répondre
private void functionName (ref Type variableName)
{
}
à l'appeler
functionName(ref variable);
et veillez à utiliser également le mot-clé ref lors de l'appel de la méthode SomeMethod (ref variableName); –
bon point. Je vais l'ajouter – kemiller2002
Vous pouvez transmettre des paramètres par référence en C# en utilisant cette syntaxe.
public void MyMethod(ref string myString)
{
}
Vous devrez alors mettre ref avant la valeur lors du passage.
Peut-être mérite-t-il de mentionner que cela [typiquement] n'est pas nécessaire pour passer des objets, seulement des primatifs. –
Oui, très bon point. –
Voici un bel aperçu de passage de paramètres en C#:
Votre question est extrêmement claire, mais il est tout à fait possible que mon article on parameter passing in C# répondra à tout ce que vous avez vraiment l'intention de demander.
En particulier, vous devez faire la distinction entre le passage d'une référence en valeur, et en passant un argument par référence. Si vous êtes flou sur les types de valeur et de référence, vous pouvez également regarder my article on that topic.
Indicatif téléphonique:
string companyName = "New Company";
GetEmail(ref companyName);
Code de la méthode:
private void GetEmail(ref string companyName)
{
}
Vos questions ne sont pas claires, mais je voudrais souligner que dans C#, sont passés des objets par référence par défaut . C'est-à-dire, si vous avez un objet, puis passez cet objet à une méthode qui apporte des modifications à cet objet, ces changements affecteront également l'objet dans votre code appelant, car ils référencent tous les deux le même objet.
"en C#, les objets sont passés par référence par défaut": ce n'est pas vrai ... ils sont passés par valeur sauf si vous spécifiez le modificateur 'ref'. Je pense que vous confondez la différence entre les types de référence et les types de valeur, et la différence entre passer des paramètres par référence ou valeur. Lorsque vous transmettez un type de référence en tant que paramètre par valeur, vous transmettez une référence par valeur; la fonction appelée ne peut pas modifier cette référence, mais elle peut modifier l'objet référencé –
Je trouve ça assez amusant quand les gens changent l'état d'un objet qui n'a pas été transmis par référence. Vraiment fait pour le code propre et évident. –
@Thomas .. Vous ne faites que du nitpicking ... les types primitifs sont passés par valeur, les objets sont passés par référence. Oui, la référence à l'objet lui-même est transmise par valeur, mais l'objet lui-même n'est pas copié, mais une référence est envoyée. C'est pourquoi je dis que les objets sont transmis par référence. – BFree
Jon Skeet a un bon article sur ce here. En C#, les types de valeur (comme int, double, byte et structs) sont transmis par valeur, par défaut. Cela signifie que la méthode de réception a une nouvelle instance du type. Si un int qui a une valeur de 1 est passé à la méthode et que la méthode la change en 2, cette modification n'est reflétée que dans la méthode, l'int appelant est toujours 1. Si toutefois le mot-clé ref est ajouté, alors change apportées à cet entier sont renvoyées à l'emplacement appelant.
Toutes les classes en C# sont des types de référence. Cela signifie que, par défaut, les références sont transmises par valeur. C'est la partie importante. Cela signifie que les modifications apportées à cette instance de l'objet sont renvoyées à l'emplacement appelant, car il s'agit du même objet. Toutefois, si la méthode change de référence à un objet différent, cette modification n'est pas répercutée. Dans le cas où vous souhaitez que ces modifications soient répercutées, vous devez utiliser le mot-clé ref sur le paramètre.
public static void Main()
{
int i = 1;
Method1(i); //i here is still 1
Method2(ref i); //i is now 2
SimpleObj obj = new SimpleObj();
obj.Value = 1;
Method3(obj); //obj.Value now 2
Method4(obj); // obj.Value still 2
Method5(ref obj); //obj.Value now 5
}
private static void Method5(ref SimpleObj obj)
{
obj = new SimpleObj();
obj.Value = 5;
}
private static void Method4(SimpleObj obj)
{
obj = new SimpleObj();
obj.Value = 5;
}
private static void Method3(SimpleObj obj)
{
obj.Value++;
}
private static void Method2(ref int i)
{
i++;
}
private static void Method1(int i)
{
i++;
}
public class SimpleObj
{
public int Value { get; set; }
}
Le mot-clé est ref
couvert dans la section 10.6.1.2 de la spécification C# 3.0. Here est la documentation msdn.
- 1. Passer une méthode en tant qu'argument
- 2. Comment passer une méthode en tant que paramètre dans Python
- 3. Comment passer une référence const en C#?
- 4. Passer une méthode aléatoire en paramètre?
- 5. Comment passer une référence de méthode à une méthode différente en C#
- 6. Comment passer une carte 2D en tant que paramètre à une fonction en C++?
- 7. C# - Comment définir une méthode en ligne Func <T> en tant que paramètre?
- 8. Les opérateurs en tant que paramètres de méthode en C#
- 9. Comment passer plusieurs paramètres en Objective-C?
- 10. Comment passer tableau en C#
- 11. Comment lancer une interface en tant que type dans C#?
- 12. Quitter une méthode en C#
- 13. comment passer xml en tant que paramètre en utilisant la méthode POST et en utilisant jquery ajax
- 14. Passing Interface en tant que paramètre à une méthode d'extension
- 15. Passer l'URL en tant que paramètre
- 16. Comment accepter n'importe quel type de nombre dans une fonction en tant qu'argument en C#?
- 17. Est-il possible de déclarer une méthode en tant que paramètre en C#?
- 18. Passer un ref ou un pointeur vers un type géré en tant qu'argument en C++. Net
- 19. Passer un pointeur intelligent en tant qu'argument dans une classe: scoped_ptr ou shared_ptr?
- 20. ObjectDataSource DataObjectTypeName Aide. Faire passer l'objet en tant que paramètre
- 21. Transmission d'un objet distant à une méthode distante en C#
- 22. Références pour apprendre à écrire une application multithread en C#?
- 23. Initialiser un tableau de chaînes dans un appel de méthode en tant que paramètre en C#
- 24. Suivre toutes les références d'objet en C#
- 25. type anonyme en tant que paramètre de méthode
- 26. Passer le flotteur "byref" en Objective C?
- 27. Accès à une méthode statique en C#
- 28. Comment passer une propriété générique en tant que paramètre à une fonction?
- 29. Passer des paramètres à des rapports de cristal en C#
- 30. Comment créer une méthode d'extension sur une classe en C#?
Voulez-vous dire les paramètres de ligne de commande -look dans la méthode Main. Ou voulez-vous dire passer par référence? Méthode principale - http://msdn.microsoft.com/fr-fr/library/ms228506.aspx Passing parameters- http://msdn.microsoft.com/en-us/library/0f66670z.aspx – RichardOD