10
votes

Comment passer des paramètres facultatifs sur une méthode en C #?

Comment passer des paramètres facultatifs sur une méthode en C #?

Supposons que j'ai créé une méthode appelée Sendcommand xxx

maintenant je veux appeler cette méthode dans la méthode principale comme xxx

Comment réaliser cela?


2 commentaires

Dupliqué possible de Comment utiliser des paramètres facultatifs dans C #?


S'il vous plaît voir ma réponse: N'utilisez pas une seule méthode, utilisez une méthode par commande ou une classe de commande distincte pour chaque commande.


13 Réponses :


17
votes

pré .NET 4 Vous devez surcharger la méthode: xxx

.NET 4 introduit la prise en charge des paramètres par défaut, ce qui vous permet de faire tout cela en une seule ligne. < Pré> XXX


D'ailleurs, dans la question que vous l'avez écrite, vous n'appelez pas la méthode dans votre premier exemple non plus que: xxx

utilise toujours un seul paramètre qui est la concaténation des deux chaînes.


1 commentaires

J'ai pensé à cela, mais dans ce cas, je ne suis pas sûr d'avoir une surcharge appelant l'autre avec "null" est nécessaire, il semble probable qu'un ensemble de commandes nécessiterait le paramètre et qu'un autre ensemble ne le ferait pas, donc chacun La surcharge gère simplement un ensemble différent de commandes.



0
votes

Il y a trois solutions faciles à celui-ci:

  1. Surcharger la méthode
  2. Autoriser la méthode d'accepter "NULL" et gérer de manière appropriée
  3. Utilisez .NET 4, qui permet des paramètres facultatifs

0 commentaires

0
votes

Créer une autre méthode qui appelle le premier? XXX


0 commentaires

0
votes

Surcharger la fonction. plutôt que de vérifier la branche conditionnelle. Quelque chose comme ceci: xxx


0 commentaires

14
votes

Utilisez l'attribut Params: xxx

puis vous pouvez l'appeler comme ceci: xxx

ou si vous utilisez c # 4.0 Vous pouvez Utilisez la nouvelle fonctionnalité des arguments facultatifs: xxx


2 commentaires

Ajout de ce commentaire ici où on peut le voir - veuillez ne pas mettre en œuvre une seule méthode qui fait de nombreuses choses complètement différentes. Une méthode devrait à gros parler d'une tâche. Cela signifie que des commandes simples peuvent être dans des méthodes distinctes - ou si des commandes sont complexes, créez une classe pour chaque commande. Ceci est destiné à la maintenabilité, à la lisibilité, à la mise hors service et plus encore. Sendcommand devrait également être nommé de manière appropriée; Est-ce que cela envoie réellement une commande quelque part? Si nécessaire, cela pourrait être appelé Parsecommand - il analyse et laisse l'exécution à d'autres méthodes / classes.


Notez également que, dans le cas où vous avez plusieurs arguments facultatifs, vous pouvez utiliser un point de points pour désigner le paramètre facultatif que vous parlez. Ex.: Sendcommand ("CMD", Strfilename: "ABC");



0
votes

Vous pouvez le faire de quelques égards. Si vous utilisez .NET 4.0, vous pouvez utiliser des paramètres facultatifs sur la méthode: xxx

sinon, vous pouvez simplement créer une autre méthode qui appelle la méthode que vous avez déjà, mais en passant les paramètres par défaut que vous avez Voulez-vous être facultatif: xxx


0 commentaires


0
votes

Paramètres facultatifs La fonctionnalité vient en C # 4.0 Ici est le lien. Sinon, vous devez écrire une fonction surchargée.


0 commentaires

5
votes

La réponse évidente pour cela devrait être, ne le fais pas de cette façon .

Vous devez soit avoir une méthode distincte pour chaque commande, ou une classe de base de commande et une classe dérivée distincte pour chaque commande, avec une méthode d'exécution.

C'est mauvais design pour avoir une méthode qui gère toutes les commandes imaginables.

Vous ne voulez vraiment pas un Sendcommand () pour gérer toutes les commandes possibles.


2 commentaires

Si j'ai 100 commandes, je dois écrire 100 méthodes dans ce cas?


Oui. Il serait préférable d'avoir 100 classes en réalité - un fichier avec 100 méthodes est trop nombreux. Ces deux options sont cent fois mieux qu'une méthode qui gère l'exécution de 100 commandes! Pouvez-vous imaginer combien de temps cette méthode serait, à quel point il serait difficile de déboguer, combien de paramètres facultatifs qu'il faudrait avoir: probablement en retrait tant il sera difficile de voir quels {ou} sont ceux-ci. Certainement, définitivement, vous ne voulez certainement pas une méthode pour gérer toutes les commandes. Une par commande ou une classe par commande.



0
votes

Toutes les réponses données sur cette page sont des moyens valides d'accepter des paramètres facultatifs, mais dans de nombreux cas, il s'agit d'un signe que votre méthode tente de faire trop.

Dans de nombreux cas, vous pourriez être mieux avec Les méthodes sans ambiguïté suivantes ... xxx


0 commentaires

0
votes

Vous pouvez utiliser les paramètres mots-clés: xxx

et vous pouvez l'utiliser comme: xxx


0 commentaires

1
votes

Les gens,

Je regardais ce fil, essayant de résoudre un problème qui n'existe pas réellement, car c # "passe simplement par" un tableau des params! Ce que je ne savais pas avant d'avoir juste essayé. P>

Voici un SSCCE: P>

CSharpLanguageDesigners.ToList().ForEach(dude=>dude.Kudos++);


0 commentaires

0
votes

Utilisation [option] attribut de runtime.interopservices noms de noms n'a pas encore été proposé ici.

vérifier 4 différentes manières Pour faire un paramètre de méthode en option en C #


0 commentaires