Это сообщение относится к C# в Unity, но я предполагаю, что общие знания C# будут применимы.
Возьмите следующий код:
class myClass
{
IEnumerator myEnumerator;
public IEnumerator theEnumerator()
{
int i = 0;
while (true)
{
Debug.Log(i++);
yield return null;
}
}
public void Update()
{
if (myEnumerator == null) { myEnumerator = theEnumerator(); }
myEnumerator.MoveNext();
}
}
Если я создаю экземпляр этого класса, а затем вызываю «Обновить» один раз за кадр, я получаю в журнале следующий вывод:
0
1
2
3
4...
Это отлично работает, однако я хочу реализовать некоторые пользовательские функции в самом IEnumerator. Но если я создам следующее:
public class myIEnumerator : IEnumerator
{
public int myCustValue;
public void myCustFunction(){}
}
а затем обновите класс oringal, заменив "IEnumerator" на "myIEnumerator", я получаю следующую ошибку:
The body of `myClass.theEnumerator()' cannot be an iterator block because `myIEnumerator ' is not an iterator interface type
Что я здесь делаю неправильно и как мне создать свой собственный IEnumerator?
IEnumerable
,IEnumerable<T>
,IEnumerator
иIEnumerator<T>
. Наследование не работает для блоков итераторов. - person Enigmativity   schedule 03.12.2015