- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
public static class Test3
{
public delegate object MyDelegate(object o);
public delegate T MyDelegate<T>(T o);
public static void Run()
{
MyDelegate dlgA = (o) => { return o; };
MyDelegate<object> dlgB = (i) => { return i; };
MyDelegate dlg = ChangeType<MyDelegate>(dlgB);
}
static T ChangeType<T>(Delegate dlg)
{
return (T)(object)Delegate.CreateDelegate(typeof(T), dlg.Target, dlg.Method);
}
}
MyDelegate и MyDelegate<T> в своих реализациях (08, 10) - тождественность \x.x=x, с одим различием - классы типов, над которыми они определены.
Очевидно, что ограничение типов MyDelegate более слабые, нежели MyDelegate<T>, а в рассматриваемых релизациях по своим сигнатурам они инвариантны, поэтому трижды глупо привлекать для подобных трансформаций тяжёлый introspection в виде .NET reflection.
выглядит хуже нежели:
А каст таков:
MyDelegate dlg = dlgB;
А у меня и .NET нет тут совсем, только ECMA'ы разные ;)
Может же такое сработать? TI:
static
* slffix
семён
это волшебный паттерн, который стоит ловить на уровне CI, и ломать билд, пока dev не объяснит на очной ставке, почему так в этом месте написано.