7
votes

Foo () vs this.foo ()

J'ai un collègue qui utilise un outil de refactoring C #. L'outil pour une raison quelconque perfers: xxx

sur xxx

Nous lui avons demandé de l'éteindre simplement parce que c'est gênant d'avoir Tout le code réécrit automatiquement, mais ce n'est pas le point.

est-ce que je manque quelque chose, ou est-ce juste faux? Pourquoi je voudrais-je ceci.fooo () ?


2 commentaires

Voter pour fermer cette question aussi subjective et argumentative. Il n'y a pas de bonne réponse définitive ici, tout est tombé aux opinions et au style. Fondamentalement, c'est un sondage déguisé.


Notez que si vous essayez d'utiliser une méthode d'extension (disons que votre classe implémente iEnumerable et que vous souhaitez appeler cela.count ()), vous devez utiliser "Ceci". pour déclencher la méthode de l'extension.


6 Réponses :


1
votes

C'est une chose de style. Parfois, les gens pensent que cela rend le code plus clair - apparemment, certaines personnes trouvent utile d'être explicites sur la cible d'une invocation de méthode. Personnellement, je trouve l'utilisation parasite de ce à distraire.


0 commentaires

2
votes

Si vous voulez l'utiliser, utilisez-le.

Si vous ne voulez pas l'utiliser, ne l'utilisez pas.

Il n'y a pas de bonne réponse ici.

Si pour une raison quelconque, vous avez une convention de dénomination où le nom seul ne suffit pas pour déterminer si vous envisagez une variable locale, un paramètre de méthode, un champ d'instance, une propriété ou une méthode, vous devez corriger La convention de dénomination, au lieu de préfixer les champs locaux avec ceci. pour les distinguer des variables locales.


0 commentaires

2
votes

Je pense que cela revient à une question de syntaxe vs sémantique. L'argument pour ceci.fooo () est-il très explicitement désignant exactement ce que FOO () est et à son origine. Il n'y a pas de merveille s'il s'agissait d'un argument transmis à une méthode, ou une classe statique déclarée qui sait-le savoir. C'est une méthode sur l'objet actuel, période. Quelque chose de moins et vous abandonnez une sémantique claire en faveur de la syntaxe plus serrée.

L'argument évident contre celui-ci: souris-over et ctrl + click.


3 commentaires

Si le seul argument contre celui-ci est de la souris, je serais en faveur de cela, car vous devriez pouvoir lire le code à l'écran sans aller à la recherche de souris avec la souris. La convention de dénomination résoudrait cela.


Je suis enclin à être d'accord. C'est l'une de ces "oui-i-a-have-a-a-a-a-a-préférences-mais pas - aussi fort-que je suis-je-suis-je suis-je-je suis-je-je suis-je-la-question - à participer à un saint-guerre Constitution des ARDS-and-Conventions-et-Constitution - Des problèmes. Je suis largement tombé amoureux de C # car il est syntaxe concise et significative par rapport à ce que j'étais habitué à. Un peu de Smidgen de verbosité n'est pas nécessairement une mauvaise chose cependant.


Oui, d'accord, et c'est le problème avec cette question, tout est tombé au choix et à l'opinion. Je vais voter pour le fermer.



1
votes

Cet exemple montre comment le mot clé code> (code> peut être utilisé pour décrire explicitement la portée de la variable:

class Item
{
    int id;

    public Item (int id)
    {
        this.id = id;
    }

}


6 commentaires

C'est une horrible convention de dénomination de toute façon. Je n'utilise pas ceci. Mais je ne vais pas dire aux gens à ne pas l'utiliser, mais je vous le dise sérieusement (ou quelqu'un d'autre) de ne pas utiliser cette convention de dénomination. Corrigez le problème de la convention de dénomination et la question de ceci. vs non ceci. devient encore une question d'opinion.


@Lasse V. Karlsen Dans cet exemple, pour démontrer votre convention préférée, quel nom utiliseriez-vous pour le paramètre au lieu de ID ?


@Lasse V. Karlsen: Je conviens que ce n'est pas la meilleure convention, mais certains IDes, par exemple Netbeans, génèrent automatiquement le constructeur en utilisant ...


@Lasse: Merci d'avoir partagé .. Pourriez-vous me dire s'il vous plaît comment nommer des champs et des paramètres?


J'aime préfixer les champs avec _ . donc int _id; dans ce cas. Encore une fois, marcher fermement dans le domaine de l'opinion subjective ... J'ai tendance à faire ce que vous faites lors de la mise en place de propriétés automatiques dans un constructeur, où il n'y a pas de champ.


Pour ce que ça vaut la peine, blogs.msdn.com / B / ERICLIPPERT / Archive / 2009/07/06 / ...



2
votes

Comme d'autres réponses ici, il s'agit principalement d'une question de style.

plusieurs fois un appel à foo () serait sans ambiguïté sans le , mais il y a des moments où cela pourrait ajouter de la clarté. Par exemple: xxx

Dans ce cas, le ceci. PREFIX aide à rendre l'invocation de la méthode se démarquer des invocations de délégués.

est-ce nécessaire ? Non, et la Lasse V. Karlsen souligne correctement que le ceci. est juste un substitut pour une convention de dénomination qui le rend sans ambiguïté.

Mais je trouve que je vais fréquemment utiliser le this.foo préfixe sur les propriétés locales pour une raison similaire, où est encore une question de style.


0 commentaires

0
votes

J'utilise toujours ceci. car il montre explicitement où se trouve la chose. Je n'utilise même pas un outil de refactoring pour le faire. Je le tape à la main.


0 commentaires