1
11
您可以使用reflector查看编译器如何实现它。
|
2
11
|
3
7
正如mehrdad所说,它构建了一个状态机。
以及使用反射器(另一个很好的建议),你可能会发现
my article on iterator block implementation
有用的。它将会是
相当地
如果不是因为
|
4
2
让我们倒带一点:
实际上,这与使用将在后台使用的内置实现不同,而是编译器重写
A(有限)
state machine
只是一段代码,它取决于您在代码中的位置(取决于前一个状态,输入)转到另一个状态操作,当您使用并屈服于方法返回类型为
这正是c编译器/roslyn要做的:检查
如果您对状态机和编译器如何重写迭代的细节感兴趣,可以在github上查看这些链接:
琐事1
:
如前所述,状态机在
编译器从用户代码生成的代码看起来不太“好”,主要是因为编译器在这里和那里添加了一些奇怪的前缀和后缀 例如,代码:
在编译之后,与上面那段代码相关的变量和类型如下:
关于状态机本身,让我们看一个非常简单的例子,其中有一个用于产生偶数/奇数的伪分支。
将被翻译成
正如您所看到的,这个实现远不是简单的,但它确实完成了任务!
琐事2
:发生了什么
当使用
你也可以退房 this example 具有不同的路径/分支和编译器重写的完整实现。
这是用
SharpLab
,您可以使用该工具尝试不同的
关于问题的第二部分,
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |