- Les structures en C# sont amusantes
- Brève introduction aux Value Types vs Reference Types.
- Initialisation des champs dans les structures (cet post).
- Comportement des constructeurs dans structures.
- Des autres scénarios dans lesquels le comportement des constructeurs de structure peut vous surprendre.
- Struct avec des valeurs d'argument par défaut dans les constructeurs, ou, n'êtes-vous pas encore confus ?
- Le modificateur `required`de C # 11 ne sauvegardera pas votre
c*lemploi. - Structure utilisée comme valeurs d'argument défaut.
- Bonus: L'evolution des structures en C#.
Poursuivant notre série sur les types de valeur (Value Types), étant donné le code ci-dessous, qu'attendez-vous qu'il imprime (je vous recommande d'essayer de répondre avant de l'exécuter):
Si vous avez répondu 0 (zéro), vous l'avez cloué et avez probablement déjà une bonne compréhension de la façon dont .NET/C# gère l'instanciation de type valeur/l'initialisation de champ; par contre, si vous avez répondu 32, vous avez peut-être été trompé.
Dans cet article, je vais aborder brièvement l'un des aspects qui conduisent à ce comportement : l'initialisation des champs en .NET, ou pour être plus précis, en C#.
D'une manière trop simpliste, chaque fois que le compilateur C# trouve une initialisation de champ, il déplacera simplement le code d'initialisation vers les constructeurs, c'est-à-dire que l'initialisation d'un champ équivaut à définir sa valeur dans les constructeurs (les champs statiques sont initialisés dans les constructeurs statiques), donc étant donné le code ci-dessous :
le compilateur C# le traitera tel qu'il a été écrit ainsi :
ce que vous pouvez confirmer dans l'IL généré ci-dessous, mais gardez ce qui suit à l'esprit si vous n'êtes pas familier avec le code IL :
- Il ne faut pas se laisser intimider par son apparente complexité.
- J'ai inclus des commentaires pour souligner les éléments clés.
- J'ai omis certains détails moins cruciaux.
- Il n’est pas nécessaire de saisir tous les détails pour comprendre le concept principal.
Les lignes 6~22 et 25~36 définissent le constructeur ne prenant aucun paramètre et celui prenant un int (Int32); notez que le code lié à l'initialisation du champ (`f = 42`) a été introduit dans les deux (lignes 9~11 et 29~31).
Dans le prochain article, nous commencerons à explorer le comportement du constructeur de structure, c'est-à-dire la deuxième partie du puzzle qui explique pourquoi le programme en haut de l'article imprime 0.
Comme toujours, tous les commentaires sont bienvenus.
Amuse toi!
No comments:
Post a Comment