@SergeySerge11

Как в runtime вставить в метод код, рефлексия, кодогенерация?

Как добавить в сам метод, код. Раньше где-то видел. Чет не нашел.
изменить код метода НА ЛЕТУ ни каких оберток
[Magic] void Func(){     
Thread.Sleep(1000);
}
// должно превратиться  вот в это
void Func(){     
Console.WriteLine("Start");
Thread.Sleep(1000);
Console.WriteLine("Finish");
}
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
https://learn.microsoft.com/en-us/dotnet/api/syste...

using System;
					
public class Program
{
	delegate void MyFunc();
 
	public static void FuncA(){     
		Console.WriteLine("FuncA");
	}

	public static void FuncB(){    
		Console.WriteLine("FuncB");
	}
	
	public static void Main()
	{
		MyFunc Func = FuncA;
		Func();
		Func = FuncB;
		Func();
	}
}

FuncA
FuncB
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka Куратор тега C#
Токсичный шарпист
Есть два варианта:
https://www.postsharp.net/
https://github.com/Fody/Fody
А вот в рантайме, емнип, нельзя менять код.
Но можно сгенерировать абсолютно новый код (новый класс с новым методом) через System.Reflection.Emit
Ответ написан
Комментировать
Griboks
@Griboks Куратор тега C#
Поскольку шарп компилируется, то вы не можете менять исходники в рантайме (их просто не существует). Но вы можете скомпилировать в рантайме динамически сформированную библиотеку, а затем её сразу же подгрузить и вызвать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы