Je lis, je lis efficace C # (deuxième édition) et il parle de méthode d'allusion em>. Je comprends le principe, mais je ne comprends pas Voyez comment cela fonctionnerait basé sur les 2 exemples du livre. Le livre dit: P> Moyens d'inlinage pour substituer le corps d'une fonction pour l'appel de la fonction. P>
blockQuote> assez juste, donc si j'ai une méthode, et son appel: p> Le compilateur JIT pourrait (sera-t-il?) en ligne pour: P>
string val = "Default Name";
if(Obj != null)
val = Obj.Name;
3 Réponses :
hypothétiquement strong> parler, l'afflication ici déballerait le corps de get_name () code> généré automatiquement par le compilateur, qui renvoie simplement un champ de support privé. Cela pourrait ressembler à ceci:
string val = Obj.k__BackingField;
En effet. Bien entendu, le compilateur C # ne fait aucune inlinge, qui est à la place différée au JIT. Au niveau JIT, il n'y a plus une différence entre les appels de méthode et les accès à la propriété - les deux peuvent être inlinés de la même manière.
@Hans je ne sais pas si cela ferait cela dans ce cas, donc c'est hypothétique pour moi.
Inlinaison prend des endroits
Les propriétés automatiques sont le sucre syntaxique pour les propriétés sauvegères de champ.
Les propriétés sont du sucre syntaxique pour le régleur et / ou les méthodes getter. P>
Par conséquent, le code que vous donnez est plus ou moins équivalent à: p> alors de même que le code p> est équivalent à: p> string val = obj.name code> devient équivalent à
string val = obj.get_name () code> qui peut être inlincé à
string val = obj._name code>. p>
string val = "Default Name";
if(Obj != null)
val = Obj._name;
La question est actuellement très large, répondant aux éléments suivants contribuerait: quel est le livre indiquant que l'inclusion résultante sera-t-elle? Pourquoi pensez-vous que cela ne fonctionnera pas?
par compilateur, vous voulez dire Jiter Compiler?
@ARLANDESS, @LUKAS - Le livre mentionne ces deux exemples et n'indique pas plus avant comment i> il sera inliné, d'où ma question. Oui, je veux dire le compilateur JIT. J'ai mis à jour ma question pour faire clairement ces points, merci.