Pourquoi pas System.Void?

Dupliquer possible:
Qu’est-ce que System.Void?

Je n’ai aucune raison pratique de connaître cette réponse, mais je suis quand même curieux …

En C #, essayer d’utiliser System.Void produira une erreur de compilation:

erreur CS0673: Impossible d’utiliser System.Void à partir de C # – utilisez typeof (void) pour obtenir l’object de type void

Si j’ai bien compris, void est simplement un alias de System.Void . Donc, je ne comprends pas pourquoi “System.Void” ne peut pas être utilisé directement comme vous le feriez avec “ssortingng” pour “System.Ssortingng” par exemple. J’aimerais lire une explication pour cela!

Incidemment, System.Void peut être utilisé avec succès avec le compilateur Mono, au lieu de celui de Microsoft, et cela semble équivalent à l’utilisation du mot clé void . Il doit donc s’agir d’une ressortingction imposée par le compilateur plutôt que d’une ressortingction CLR, n’est-ce pas?

Je crois que le seul but de cette structure est de l’utiliser en reflection, alors que les autres types (comme System.Ssortingng, System.Int32, etc.) sont des types appropriés contenant des données. Void ne contient aucune donnée et vous ne pouvez pas instancier cette structure à partir de votre code.

À mon avis, l’erreur du compilateur est d’assurer la cohérence du code. Il serait étrange d’avoir des méthodes comme celle-ci:

 System.Void MyMethod() { ... } 

À première vue, il semble que quelque chose soit retourné, alors qu’en réalité ce n’est pas le cas. À mon avis, c’est une bonne décision de la part de l’équipe C # (si mes spéculations à ce sujet sont correctes)

Peut-être parce que si System.Void était autorisé comme référence de type, il pourrait commencer à apparaître dans

  • déclarations de fonction (type de retour) – ceci est évidemment légitime
  • déclarations de parameters
  • déclarations d’argument de modèle
  • déclarations de variables

Utiliser typeof(void) rend cela illégal syntaxiquement. Cela suit le principe de la moindre surprise

Edit En outre, comme le souligne Eric Lippert, c’est parce que, par exemple, Void n’est une super-classe de rien (le void est en fait invariant ). Vous trouverez toutes les informations à ce sujet ici http://blogs.msdn.com/b/ericlippert/archive/2009/06/29/the-void-is-invariant.aspx