Разрешение перегрузки.
От: WolfHound  
Дата: 28.04.10 14:22
Оценка:
По следам этой
Автор: WolfHound
Дата: 28.04.10
темы.

class A {}
class B : A {}
module Program
{
  public Cat[T](this e1 : IEnumerable[T], e2 : IEnumerable[T]) : IEnumerable[T]
  {
    foreach (item in e1)
      yield item;
    foreach (item in e2)
      yield item;
  }

  public Cat[T, U](this e1 : IEnumerable[T], e2 : IEnumerable[U]) : IEnumerable[U]
    where T : U
  {
    foreach (item in e1)
      yield item : U;
    foreach (item in e2)
      yield item;
  }

  public Cat[T, U](this e1 : IEnumerable[U], e2 : IEnumerable[T]) : IEnumerable[U]
    where T : U
  {
    foreach (item in e1)
      yield item;
    foreach (item in e2)
      yield item : U;
  }

  Main() : void
  {
    def a = [A(), A(), A()] : IEnumerable[A];
    def b = [B(), B(), B(), B()] : IEnumerable[B];
    _ = a.Cat(b);//Вызов метода номер 3
    _ = b.Cat(a);//Вызов метода номер 2
    _ = a.Cat(a);//Ошибка. Поздходят все три метода.
  }
}

Можно ли изменять правила разрешения перегрузки чтобы был выбран первый метод?
... << RSDN@Home 1.2.0 alpha 4 rev. 1305>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.