From the documentation:
The Void
structure is used in the
System.Reflection
namespace, but is
rarely useful in a typical
application. The Void
structure has no
members other than the ones all types
inherit from the Object
class.
There's no reason really to use it in code.
Also:
var nothing = new void();
This doesn't compile for me. What do you mean when saying it "works"?
Update:
A method void Foo()
does not return anything. System.Void
is there so that if you ask (through Reflection) "what is the type of the return value of that method?", you can get the answer typeof(System.Void)
. There is no technical reason it could not return null
instead, but that would introduce a special case in the Reflection API, and special cases are to be avoided if possible.
Finally, it is not legal for a program to contain the expression typeof(System.Void)
. However, that is a compiler-enforced restriction, not a CLR one. Indeed, if you try the allowed typeof(void)
and look at its value in the debugger, you will see it is the same value it would be if typeof(System.Void)
were legal.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…