ASP.NET - Статические переменные и конечные автоматы - Будет ли один пользователь влиять на другого? - PullRequest
1 голос
/ 06 апреля 2011

Я реализовал некоторые функции в C #, используя оператор yield с функцией, возвращающей IEnumerable.

Мой вопрос заключается в том, что, если эта функция является статической функцией в статическом классе, она неявно содержит в себе что-либо как конечный автомат, который затронет более одного пользователя, или итератор содержит все , относящееся к государство? (Статические члены являются областью применения.)

1 Ответ

1 голос
/ 06 апреля 2011

Нет, это не так.Созданный IEnumerable<T> будет иметь тип, который не содержит дополнительных статических данных.Он может ссылаться на статическую информацию, но только если вы явно обращаетесь к ней из итератора

Например.

public static class Utils {
  public static IEnumerable<int> Range(int start, int count) {
    for (var i = start; i <= count; i++) {
      yield return i;
    }
  }
}

Примерно переводится как

public static class Utils {
  private class RangeIterator : IEnumerable<int>, IEnumerator<int> {
    ... 
    // iterator state machine
  }
  public static IEnumerable<int> Range(int start, int count) {
    return new RangeIterator(start, count);
  }
}
...