void
n'est pas un type, c'est un mot-clé. Tout comme il est en C++, signifie exactement la même chose. Mots-clés jouent un grand rôle joué dans une langue, elles ne peuvent apparaître à certains endroits et l'analyseur est autorisé à faire dur hypothèses sur l'intention du programmeur.
Principalement le rôle est de générer des messages d'erreur. Évident sur une instruction comme celle - return 42;
dans une méthode déclarée nulle, vous obtenez un crystal-clear "hey, vous avez dit qu'il ne reviendra pas tout" message d'erreur. Moins évident, c'est qu'elles sont très utiles pour récupérer à partir de la base des erreurs de syntaxe, un manquant de }
accolade de fermeture, par exemple, est une jolie erreur de disque dur à récupérer. Lorsque l'analyseur rencontres, void
lors de l'analyse d'un corps de méthode, alors il peut réinitialisation de l'analyseur de l'état et de commencer à produire de bons messages d'erreur à nouveau.
Que l' System.Void
type existe à tous est un caprice liées aux métadonnées. Ce qui équivaut à un .h de fichier en C++. Ils existent primaire pour faire face à des restrictions techniques en C++, il n'a pas de concept de modules, il utilise un seul passe-modèle de compilation et exige que les déclarations apparaissent toujours avant les définitions. Assez douloureux travail en C++, mais que l'éditeur de l'outillage peut aider un peu. Aucune restriction de ce genre en C#, le compilateur génère la déclaration de la définition.
Les métadonnées décrit une méthode en détail, stockée dans un MethodDef et MethodDefSig enregistrements dans les métadonnées. Deux façons simples de la CLR concepteurs pourraient avoir exprimé la notion de "cette méthode ne retourne pas de données". D'une manière évidente, c'est qu'ils ont pu s'en servir un peu dans le MethodAttributes enum, quelque chose comme "HasNoReturnValue". Mais depuis, beaucoup de méthodes ont un non-vide type de retour, et de l'espace est réservé dans le MethodDefSig record de toute façon, ils ont juste pris une sentinelle de la valeur que le type de retour. Système.Void.
La réflexion sur le Système.Type Void n'est généralement pas utile. De façon réaliste, ils auraient pu choisir n'importe quelle valeur pour IsPrimitive et il n'aurait pas fait toute la différence. Faux était un choix logique, il ne décrit pas un type.