如何在 UML 序列图中描述 C# yield return?
How to describe C# yield return in UML sequence diagram?
例如,
using System;
using System.Collections;
namespace ConsoleApplication
{
class A : IEnumerable
{
B b;
public A()
{
b = new B();
}
public IEnumerator GetEnumerator()
{
yield return b.FunA(0);
yield return b.FunB(1);
yield return b.FunC(2);
yield return b.FunD(3);
yield return b.FunE(4);
}
}
class B
{
public int FunA(int x)
{
return x;
}
public int FunB(int x)
{
return x * 2;
}
public int FunC(int x)
{
return x * 3;
}
public int FunD(int x)
{
return x * 4;
}
public int FunE(int x)
{
return x * 5;
}
}
class Program
{
static void Main(string[] args)
{
var a = new A();
foreach(var number in a)
{
Console.WriteLine(number);
}
Console.ReadLine();
}
}
}
如何用时序图描述这个程序?
我认为它应该类似于下面的循环或替代部分。
+------------+ +------------+ +------------+
|程序 | |一个| |乙 |
+-----+-----+ +-----+-----+ +-----+-----+
| | |
| | |
| | |
| | |
+-----+---------------------------------------- ------------------+
|循环| | [0] | | |
+-----+ | | | |
| | | | |
| | | | |
| | | | |
+------------------------------------------------ ------------------+
| | [1] | | |
| | | | |
| | | | |
| | | | |
| | | | |
+------------------------------------------------ ------------------+
| | [2] | | |
| | | | |
| | | | |
| | | | |
| | | | |
+------------------------------------------------ ------------------+
| | [3] | | |
| | | | |
| | | | |
| | | | |
| | | | |
+------------------------------------------------ ------------------+
| | [4] | | |
| | | | |
| | | | |
| | | | |
| | | | |
+------------------------------------------------ ------------------+
| | |
| | |
编辑:
我正在分析Unity3D插件的源代码。 IEnumerator 和 yield 用于实现协程模型。协程被用作线程的替代品。所以在时序图中展示协程的部分逻辑是合理的。
对于序列图,您可以定义循环(while 循环),只要关注 yield 关键字执行,请参考以下内容 link
internals of C# interators
我认为link可以帮助您理解为什么 yield 可以表示为循环。
例如,
using System;
using System.Collections;
namespace ConsoleApplication
{
class A : IEnumerable
{
B b;
public A()
{
b = new B();
}
public IEnumerator GetEnumerator()
{
yield return b.FunA(0);
yield return b.FunB(1);
yield return b.FunC(2);
yield return b.FunD(3);
yield return b.FunE(4);
}
}
class B
{
public int FunA(int x)
{
return x;
}
public int FunB(int x)
{
return x * 2;
}
public int FunC(int x)
{
return x * 3;
}
public int FunD(int x)
{
return x * 4;
}
public int FunE(int x)
{
return x * 5;
}
}
class Program
{
static void Main(string[] args)
{
var a = new A();
foreach(var number in a)
{
Console.WriteLine(number);
}
Console.ReadLine();
}
}
}
如何用时序图描述这个程序? 我认为它应该类似于下面的循环或替代部分。
+------------+ +------------+ +------------+ |程序 | |一个| |乙 | +-----+-----+ +-----+-----+ +-----+-----+ | | | | | | | | | | | | +-----+---------------------------------------- ------------------+ |循环| | [0] | | | +-----+ | | | | | | | | | | | | | | | | | | | +------------------------------------------------ ------------------+ | | [1] | | | | | | | | | | | | | | | | | | | | | | | +------------------------------------------------ ------------------+ | | [2] | | | | | | | | | | | | | | | | | | | | | | | +------------------------------------------------ ------------------+ | | [3] | | | | | | | | | | | | | | | | | | | | | | | +------------------------------------------------ ------------------+ | | [4] | | | | | | | | | | | | | | | | | | | | | | | +------------------------------------------------ ------------------+ | | | | | |
编辑: 我正在分析Unity3D插件的源代码。 IEnumerator 和 yield 用于实现协程模型。协程被用作线程的替代品。所以在时序图中展示协程的部分逻辑是合理的。
对于序列图,您可以定义循环(while 循环),只要关注 yield 关键字执行,请参考以下内容 link internals of C# interators
我认为link可以帮助您理解为什么 yield 可以表示为循环。