IEnumerable & IEnumeratorをトレーニング中に書いていたクラスに実装すると、「Current」というプロパティの2つの実装を指定する必要があることに気付きました。IEnumerator <T> .Current&IEnumerator.Currentを定義する必要があるのはなぜですか?
public class PeopleEnumerator : IEnumerator<Person>
{
People people; // my collection I'm enumerating (just a wrapped array).
int index; // my index to keep track of where in the collection I am.
...
//implementation for Person
public Person Current { get { return people[index]; } }
//implementation for object
object Enumerator.Current { get { return people[index]; } }
}
私は大体、私はIEnumeratorをいくつかの非ジェネリックバージョンと、そのための「現在」プロパティを実装しています、しかし、私は次のことを理解していないことを理解:
- を私はなぜここで戻り値の型でオーバーロードすることができますか?おそらく、それは明示的なIEnumerator.Currentと関係があります。しかし、理由は私には不透明です。
- なぜ "object IEnumerator.Current"を "public"として指定できないのですか?
ありがとうございます!
これは、問題についての私の疑惑をたくさん確認してくれた、ありがとう!プロパティ/メソッドの明示的な定義については少し混乱していますが、何が起きているのかを実際に理解するにはMSILを調べなければならないかもしれません。 –