По следам
этойАвтор: 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>>