Почему в Н я не могу заимплементить IEnumerable[T] ?
От: DarthSidius  
Дата: 06.05.12 23:56
Оценка:
Без проблем:
    class En : IEnumerable<string>
    {
        #region Члены IEnumerable<string>

        public IEnumerator<string> GetEnumerator()
        {
            throw new NotImplementedException();
        }

        #endregion

        #region Члены IEnumerable

        IEnumerator IEnumerable.GetEnumerator()
        {
            throw new NotImplementedException();
        }

        #endregion
    }

А здесь никак:
    class En : IEnumerable[string]
    {
        #region System.Collections.IEnumerable  Members
        
        GetEnumerator() : System.Collections.IEnumerator
         implements System.Collections.IEnumerable.GetEnumerator{ throw System.NotImplementedException() }
        
        #endregion
        
        #region System.Collections.Generic.IEnumerable[string]  Members
        
        GetEnumerator() : System.Collections.Generic.IEnumerator[string]
         implements System.Collections.Generic.IEnumerable[string].GetEnumerator{ throw System.NotImplementedException() }
        
        #endregion
    }

error : attempted return type overload on method Test1.En.GetEnumerator() : System.Collections.Generic.IEnumerator[string] and method Test1.En.GetEnumerator() : System.Collections.IEnumerator

... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re: Почему в Н я не могу заимплементить IEnumerable[T] ?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 07.05.12 00:10
Оценка:
Здравствуйте, DarthSidius, Вы писали:

http://rsdn.ru/forum/nemerle/3745025.1.aspx
Автор: _nn_
Дата: 22.03.10
Re[2]: Почему в Н я не могу заимплементить IEnumerable[T] ?
От: DarthSidius  
Дата: 07.05.12 00:59
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, DarthSidius, Вы писали:


N>http://rsdn.ru/forum/nemerle/3745025.1.aspx
Автор: _nn_
Дата: 22.03.10


Понял, багу 2 года уже.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re: Почему в Н я не могу заимплементить IEnumerable[T] ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.12 01:11
Оценка: 19 (2)
Здравствуйте, DarthSidius, Вы писали:

DS>

DS>error : attempted return type overload on method Test1.En.GetEnumerator() : System.Collections.Generic.IEnumerator[string] and method Test1.En.GetEnumerator() : System.Collections.IEnumerator


Да в шарпе как бы тоже нельзя метод с одним именем перегрузить по возвращаемому значению.
Тут нужно имя менять у одного из методов и реализовывать его явно.
private NonGenericGetEnum () : System.Collections.IEnumerator
            implements System.Collections.IEnumerable.GetEnumerator
{
  ...
}


Но в твоем случае нужно просто грохнуть метод:
GetEnumerator() : System.Collections.IEnumerator

Немерл его сам реализует через дженерик-метод.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Почему в Н я не могу заимплементить IEnumerable[T] ?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 07.05.12 02:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Немерл его сам реализует через дженерик-метод.


А как это правило формулируется в общем виде?
Re[3]: Почему в Н я не могу заимплементить IEnumerable[T] ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.12 20:26
Оценка:
Здравствуйте, nikov, Вы писали:

N>А как это правило формулируется в общем виде?


Как бы в языке поддерживается ко/контр-вариантность при переопределении методов. Так как дотнет это не поддерживает, то генерируются враперы которые тупо перенаправляют вызовы методу совподающему по типу с учетом ко/контр-вариантности.

Для интерфейсов генерируются враперы явно реализующие методы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.