15 votes

Passer un paramètre comme final en C#

C'est peut-être une question qui fait double emploi, mais je ne l'ai pas trouvée dans la recherche. En java, pour marquer un paramètre de méthode comme constant, nous le déclarons comme final. Quel est le mot-clé C# équivalent ? Comme

public void doSomeThing(final object myObject)
{
//print myobject
}

8voto

Oded Points 271275

Cela n'est pas possible en C# - il n'y a aucun moyen de marquer un paramètre transmis comme une constante.

Si vous avez un const qui doit être disponible pour de nombreuses fonctions, pourquoi ne pas le déclarer avec la bonne portée (portée de classe ou globale si nécessaire) ?

4voto

Daniel Earwicker Points 63298

Il existe un readonly en C#, mais jusqu'à présent, nous ne pouvons l'appliquer qu'aux champs, et non aux locaux ou aux paramètres.

Souvent, en Java, le final est utilisé habituellement comme une question de style, pour faciliter la fermeture des valeurs dans les classes internes anonymes. Mais ce problème n'existe pas en C# car les méthodes/lambdas anonymes peuvent fermer sur des variables modifiables.

Des outils comme Resharper peuvent également afficher les variables/paramètres mutés dans une couleur différente, afin que vous puissiez voir les "complications" de votre méthode en un coup d'œil. Je m'en sers pour faire apparaître les noms mutés en texte vert gras ou quelque chose comme ça !

Cela ne veut pas dire que le C# lui-même ne serait pas amélioré par de nombreuses autres fonctionnalités, comme une fonction largement applicable readonly pour aider à l'immutabilité déclarée. Mais si vous avez des méthodes courtes et que Resharper met les choses en évidence, vous n'avez pas besoin de déclarer manuellement les choses comme final/readonly/const (selon la langue). L'IDE le fait pour vous.

C'est plus logique : comme les codeurs Java l'ont découvert, la plupart des "variables" ne sont pas du tout des variables. Mais si vous devez le déclarer en ajoutant final à tout, c'est beaucoup de bruit de mots-clés supplémentaires dans votre code. Il serait plus logique que la valeur par défaut soit final et d'avoir un mot-clé pour faire les choses mutable . Voici comment cela fonctionne en F#.

3voto

Ian Mercer Points 19271

En C# 4.0 / Visual Studio 2010 avec le module complémentaire Code Contracts installé, vous pouvez utiliser Contract.Invariant dans un attribut ContractInvariantMethod pour vérifier qu'une valeur n'est pas modifiée lors d'un appel de méthode.

Ce n'est pas tout à fait la même chose, mais c'est ce qui s'en rapproche le plus, je pense.

2voto

Axarydax Points 7787

Il n'y a pas de telle chose en c#

1voto

Łukasz Bownik Points 2170

Le C# dispose d'un mot clé readonly mais il ne peut pas être utilisé pour les variables locales (membres de la classe uniquement). Cela signifie qu'il n'y a aucun moyen de marquer un paramètre méta constant.

Cela me manque aussi parce que dans mon code Java, presque tous les paramètres et les variables locales sont finaux (ce qui est un bon modèle de codage, je crois).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X