在构造函数中,这个= default(...)的目的是什么?

Eug*_*kov 6 .net c#

在一项研究中,this重新分配可能性与结构的目的我遇到了以下难题:为什么需要this = default(...)在一些结构构造函数的开头做.它实际上是零已经归零的内存,不是吗?

查看.NET核心的示例:

public CancellationToken(bool canceled)
{
    this = default(CancellationToken);
    if (canceled)
    {
        this.m_source = CancellationTokenSource.InternalGetStaticSource(canceled);
    }
}
Run Code Online (Sandbox Code Playgroud)

Lan*_*kin 11

它实际上是零已经归零的内存,不是吗?

不.当您为自己创建自定义构造函数时struct,您有责任将struct的每个字段设置为某个值.

只是默认.ctor()会用零填充它 - 这就是为什么你不允许在C#中为struct实现自己的默认.ctor的原因之一(虽然CLR在技术上允许它,但它是一个不同的话题要讨论).

因此,这里的技术是调用default(),它将创建用零填充的单独实例,当使用'this ='时,赋值将从右到左复制所有字段(因为它是struct),这将满足您初始化struct的每个字段的需要.然后,你可以做任何你想做的事.

在大多数情况下,使用类似的东西可能会更好(从代码可读性):

public MyStruct(..) : this() {
...
}
Run Code Online (Sandbox Code Playgroud)