C#のyieldの実装原理は何ですか?
yieldは、C#でイテレータを作成するためのキーワードです。yieldキーワードを使用すると、メソッドが一度に一つずつアクセスできるコレクションを返すことができ、コレクション全体をすぐに構築する必要はありません。
yieldの実装原理は次のとおりです:
- yieldキーワードを含むメソッドを呼び出すと、メソッド本体のコードはすぐに実行されるのではなく、IEnumerableまたはIEnumeratorインターフェースを実装したイテレーターオブジェクトを返します。
- MoveNext() メソッドが呼ばれると、そのメソッド内のコードが実行されます。yield キーワードが出るまで、現在の値を呼び出し元に返し、コードの実行を一時停止します。
- 次にMoveNext()メソッドが呼び出されると、コードは前回停止した位置から再開され、次のyieldキーワードまたはメソッドの終了まで実行されます。
- Reset() メソッドが呼び出されると、イテレーターの状態が初期状態に戻り、次回のMoveNext()メソッドの呼び出し時に再実行されます。
- イテレーターオブジェクトがコレクションの最後に到達した時、MoveNext() メソッドはfalseを返し、イテレーションが終了したことを示します。
これにより、yield キーワードを使用して、遅延読み込みのコレクションを簡単に作成できます。コレクション要素を反復処理する必要があるときにのみ、必要なコードが実行されるため、メモリ使用量と計算時間の複雑さが低減されます。