Непонятки с co-/contravariance делегатов и Generics
че за Act? давай весь код?
public delegate void Act<A1>(A1 x1);
у меня и первое не компилицо
Реально не компилится.
Так вот вопрос. Почему? Товарищи из MS ведь говорили, что ковариантность и контравариантность делегатов теперь есть!
Почему?M2 принимает конкретную реализацию интерфейса. А в делегат, к которому ты хочешь привести, можно передавать любую реализацию. То есть я наоборот не понимаю, почему это должно компилироваться.
1. C : I
2. Это входной параметр функции
meth2(new B;
namespace GenTest
{
delegate void Act<A1>(A1 x1);
class I { };
class C : I { };
class Program
{
void M1<T>(T v)
where T : I
{
}
void Main2
{
Act<C> meth1 = M1<I>;//yes
Act<I> meth2 = M1<I>;//yes
Act<I> meth3 = M1<C>;//no
Act<C> meth4 = M1<C>;//yes
}
static void Main(string[] args)
{
}
}
}
Оставить комментарий
aleks058
почему
?