static unsafe F createUnsafe(ref MyStruct s1, int x)
{
// почему нету такого типа
// const int _x =x;
F d = (ref MyStruct s) =>
{
//x же константа, и никуда не убежит
//s.x = _x; // есть ли способы?
// по факту сюда просто Il-команду Ldc.I4 n вставить надо
};
return (d);
}
public class UpdateCanvasListener
{
public Action Update { get; private set; }
public EventHandler< SKPaintSurfaceEventArgs> PaintHandler;
public UpdateCanvasListener(EventHandler<SKPaintSurfaceEventArgs> handler)
{
PaintHandler = handler;
}
}
class canvas{
public readonly static DependencyProperty SurfaceListenerProperty
= DependencyProperty.Register(nameof(SurfaceListener),
typeof(UpdateCanvasListener), typeof(FieldCanvas),
new PropertyMetadata(null, new PropertyChangedCallback(initSurfacePaintCommand)));
private static void initSurfacePaintCommand(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
FieldCanvas obj = (FieldCanvas)d;
var handlerOwner = e.NewValue as UpdateCanvasListener;
obj.PaintSurface += handlerOwner?.PaintHandler;
handlerOwner?.GetType().GetProperty("Update", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)?
.SetValue(handlerOwner, obj.InvalidateVisual };
}
}
Почему именно за 100 итераций? Для вычисления конечного значения итерации не нужны, и вы это понимаете, потому что сначала правильно пишите:
Может там как-то и можно сделать безопасный делегат, подкрутить метаданные, но литературы ни какой нету.
А вот через IL я понять не могу, почему не выходит. Почему просто тело функции скопировать недостаточно.
Вот для примера, пример функция А. Раскрутить цикл.
Делегат А вызывается в Цикле N раз.
Легко можно сделать ILКод без цикла, с N вызовами функций последовательно.
Теперь хочу сделать то же самое для функции B, замечу, что если сигнатура метода одинаковая, то разница между ними только байты Token-а call метода. Через ILGenerator нету смысла крутить так же, так как он при сборке кода, много лишней(уже продельной) работы выполняет, и вернет тот же результат по сути.
И я просто могу(не могу) скопировать байткод, и заменить то что нужно(Да даже просто скопировать не выходит).