Оба Cross
и Circle
являются генераторами.Они возвращают последовательность object
с помощью IEnumerable
.То есть вы могли бы написать:
foreach (var cross in Cross()) // works with Circle, also
{
// ...
}
И на каждой итерации цикла следующий возвращаемый элемент генерируется внутри метода Cross
или Circle
.Эти методы не выполняются одновременно, вместо этого каждый раз, когда достигается оператор yield return
, выполнение программы будет продолжаться в вызывающем коде (цикл foreach
), а код внутри генератора возобновляется только при следующемнеобходим элемент.
PS: Прежде чем мое интернет-соединение оборвалось на несколько часов, я также хотел прокомментировать странный факт, что ваши генераторы продолжают возвращать ссылкик себе через yield return
.Это не имеет смысла для меня, честно говоря;Я никогда не видел такого кода, и мне интересно, действительно ли он полезен?