我知道声明的方法void
不会返回任何内容.
但似乎在C#void
中只是一个关键字,而是一个真实的类型.
void
是一个别名System.Void
就像int
那是System.Int32
.
为什么我不允许使用那种类型? 它没有任何意义,但这只是对逻辑的一些想法.
也不
var nothing = new System.Void();
Run Code Online (Sandbox Code Playgroud)
(说我应该使用void
(不是别名?))
也不是
var nothing = new void();
Run Code Online (Sandbox Code Playgroud)
编译.
也不可能使用这样的东西:
void GiveMeNothing() { }
void GiveMeNothingAgain()
{
return GiveMeNothing();
}
Run Code Online (Sandbox Code Playgroud)
那么重点是什么System.Void
?
Jon*_*Jon 40
从文档:
该
Void
结构在System.Reflection
命名空间中使用,但在典型应用程序中很少使用.Void
除了从Object
类继承的所有类型之外,该结构没有其他成员.
在代码中没有理由真正使用它.
也:
var nothing = new void();
Run Code Online (Sandbox Code Playgroud)
这不适合我编译.说"有效"时你是什么意思?
更新:
方法void Foo()
不返回任何内容.System.Void
那么如果你问(通过反思)"那个方法的返回值的类型是什么?",你就可以得到答案typeof(System.Void)
.没有技术原因它无法返回null
,但这将在Reflection API中引入一个特殊情况,并且如果可能的话应避免特殊情况.
最后,程序包含表达式是不合法的typeof(System.Void)
.但是,这是一个编译器强制限制,而不是CLR限制.实际上,如果您尝试允许typeof(void)
并在调试器中查看其值,您将看到它与typeof(System.Void)
合法时的值相同.
Che*_*hen 17
void
/ System.Void
与int
/ 不同System.Int32
,它是C#中的特殊结构,仅用于反射.看这个例子:
class Program
{
public static void Main(string[] args)
{
Type voidType = typeof(Program).GetMethod("Main").ReturnType;
}
}
Run Code Online (Sandbox Code Playgroud)
必须使用某种类型来描述Main
方法的返回类型,这就是我们拥有的方法System.Void
.
我们使用了以下代码
public Type GetType(object o)
{
var type = o == null ? typeof(void) : o.GetType();
}
Run Code Online (Sandbox Code Playgroud)
这样我们就可以使用null对象模式.这是相当不错.这允许我们做类似的事情
GetType(o).GetProperties().Select( .....
Run Code Online (Sandbox Code Playgroud)
而不是在任何地方放置警卫条款
除了不返回值之外,在语言规范中给出了很少的定义void
(虽然void*
得到一些关注).这不是真正的语言问题 - 尽管CLI可能会进一步定义它.
但最终:因为它没有任何意义 new void()
归档时间: |
|
查看次数: |
7094 次 |
最近记录: |