Mon patron m'interdit d'utiliser var
qu'il serait la cause de la boxe et de ralentir l'application.
Est-ce vrai?
Mon patron m'interdit d'utiliser var
qu'il serait la cause de la boxe et de ralentir l'application.
Est-ce vrai?
Une approche qui pourrait fonctionner est d'écrire ces deux méthodes:
public static void WithInt()
{
int x = 5;
Console.WriteLine(x);
}
public static void WithVar()
{
var x = 5;
Console.WriteLine(x);
}
Compiler et utiliser ildasm
d'examiner le produit CIL. Montrer à votre patron.
edit @ck a fait tous, mais la dernière étape pour vous :)
A la suite de Aakash réponse, voici la IL: (merci LINQPad)
WithInt:
IL_0000: ldc.i4.5
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: call System.Console.WriteLine
IL_0008: ret
WithVar:
IL_0000: ldc.i4.5
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: call System.Console.WriteLine
IL_0008: ret
Pourquoi tant de personnes sont maudits avec les boss qui sont muets? Révolution, frères!
Votre patron a besoin de lire la documentation. var
, le compilateur de déterminer le type de variable en regardant le type statique de l'expression d'initialisation. Il ne fait pas la moindre différence à l'exécution si vous spécifiez le type à la main, ou si vous utilisez var
et laisser le compilateur figure it out pour vous.
Mise à jour Dans un commentaire sous la question, Hans Passant demande
pouvez-vous penser à d'var initialiseur que les causes de la boxe sans l'aide d'un casting?
Un exemple d'une expression que les forces de cette conversion, c'est:
var boxedInt = new Func<int, object>(n => n)(5);
Mais c'est juste identique à:
object boxedInt = new Func<int, object>(n => n)(5);
En d'autres termes, ce n'est pas vraiment rien avoir à faire avec var
. Le résultat de mon initialiseur d'expression est - object
, par conséquent var
a utiliser que le type de la variable. Il ne pouvait pas être autre chose.
Ce n'est pas vrai du tout.
var
signifie simplement "chers compilateur, je sais de quel type est, et vous aussi, alors laissez-moi vous déplacer sur nous."
Elle rend le code plus court et certains trouvent cela plus lisible (les autres à trouver ça moins lisible), mais il n'y a pas de perte de performances que ce soit.
Peut-être que votre patron est un ancien Visual Basic (comme dans <= 6.0) programmeur utilisé pour l' VARIANT
type. Si vous n'avez pas à spécifier le type de la variable explicitement dans votre DIM
déclaration, il a été un VARIANT
qui est une sorte de union
si je me souviens bien. Vous pouvez également voir cela comme une sorte de "boxe" et "unboxing" lors du passage de ces variables, de fonctions.
Parfois, les gens se confondre. Demandez à votre patron au sujet de son Visual Basic histoires de guerre. Écouter, d'apprendre et de gagner la sympathie en même temps! Quand vous quittez le bureau, vous pourriez remarquer que le compilateur c# les chiffres de ce genre de choses au moment de la compilation, et que "la boxe" n'est pas plus un problème.
Ne vous attendez pas à votre patron pour garder en place avec les derniers changements de langues/Api. Ce n'est pas d'être con. Il s'agit d'avoir d'autres choses à faire. Son travail, par exemple.
Edit: Comme indiqué dans les commentaires ci-dessous, si, en vous disant de ne pas utiliser var
pour les mauvaises raisons est probablement pas son travail...
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.