Il descend par un choix de la langue designer.
À partir d'un type de point de vue, nulle n'a pas d'énumération de valeurs, de sorte qu'il n'est pas judicieux de renvoyer une valeur "nulle" type? le vide est l'absence de type ou de contexte d'évaluation.
Vous ne peut pas instancier ou de retour "vide" en C# ou Java.
Si vous pouviez le faire, vous devez également être en mesure de dire:
void i;
i = (what would go here?)
return i;
Le ci-dessus ne fait aucun sens, mais il est équivalent à ce que vous proposez.
En fin de compte, en proposant que l'on pourrait se propager de retour void contexte avec l'instruction return est simplement une question de syntaxe de sucre, ce qui revient à choix faits par le concepteur.
Le langage C# spec http://msdn.microsoft.com/en-us/library/aa691305(v=vs. 71).aspx
(section 7.1) dit
Rien. Cela se produit lorsque l'expression est une invocation d'une méthode avec un type de retour void. Une expression classés comme rien n'est valide que dans le contexte d'un énoncé-expression (Section 8.6).
A l'inverse, le C++ concepteur de réellement choisi de donner juste le construire vous proposer, mais c'était précisément pour syntaxiques de l'uniformité dans les modèles. En C++, le type de retour d'une fonction de modèle peut être un paramètre du modèle. (Stroustrop Langage de Programmation C++ p 148) Sans elle, il y aurait des cas fréquents de dresser pour tous les types, mais pas pour les nuls, tels que les appels de fonctions imbriquées de type T. Pour cette raison, le texte suivant est valide en C++:
void B() {
return;
}
void A() {
return B(); // legal C++ - doesn't yield a value
}
// But even in C++ the next line is illegal
int i = A();
Si la déclaration de l'expression "retour B();" où B est une fonction void n'est qu'un raccourci pour "B(); return;" et n'est pas réellement donner une valeur, car il n'y a pas une telle chose comme un vide, une valeur.