У меня есть некоторый код, который основывался на методах, которые не были встроены:
internal class MyClass : BaseClass
{
// should not be inlined
public void DoSomething(int id)
{
base.Execute(id);
}
}
public abstract class BaseClass : MarshallByRefObject
{
[MethodImpl(MethodImplOptions.NoInlining)]
protected void Execute(params object[] args)
{
// does a stack walk to find signature of calling method
}
}
Конечно, это работает, только если метод DoSomething не встроен.По этой причине базовый класс является производным от MarshallByRefObject
, который предотвращает встраивание открытых методов.
Он работал до сих пор, но я получил трассировку стека с сервера .Net 4, показывающую, что стекопереход достиг вызывающейDoSomething.
Является ли .Net 4 более умным, и обнаруживает, что MyClass является внутренним и не имеет шансов быть замещенным прокси?