рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдбреАрдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдЬреАрд╡рди рдХреЗ рдХреБрдЫ рдорд╛рдорд▓реЗ рдмрддрд╛рдКрдВрдЧрд╛ рдЬрдм рдЗрд╕ рддрд░рд╣ рдХреЗ рдорддрднреЗрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЕрдВрдЬрд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдкрдХреЛ рдПрдХ рд░реЗрдХ рдкрд░ рдХрджрдо рд░рдЦрдиреЗ рд╕реЗ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╣рд╛рдиреА рез
рджрд░рдЕрд╕рд▓, рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ рдХрд┐ рдПрдХ рдмрдЧ рдЖрдпрд╛ рдерд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреБрдЫ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИред рдмрдЧ рдбрд┐рдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЦреЗрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдРрд╕рд╛ рдХрднреА-рдХрднреА рд╣реЛрддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рдЖрд╡реЗрджрди рдореЗрдВ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдХреБрдЫ рдРрд╕рд╛ рдерд╛ "рдХрд╣реАрдВ рд╡реЗ рдЪрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рднреВрд▓ рдЧрдП рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ"ред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрдЧ рдХрд╛ рд╕рд╛рд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдореЗрдВ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рднреА рд╕рдВрднрд╡ рдерд╛ред
рдФрд░ рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рд╛:
class Wrapper : IDisposable
{
public IntPtr Obj { get ; private set ;};
public Wrapper()
{
this .Obj = CreateUnmObject();
}
~Wrapper()
{
this .Dispose( false );
}
protected virtual void Dispose( bool disposing)
{
if (disposing)
{
}
this .ReleaseUnmObject( this .Obj);
this .Obj = IntPtr .Zero;
}
public void Dispose()
{
this .Dispose( true );
GC.SuppressFinalize( this );
}
}
* This source code was highlighted with Source Code Highlighter .
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдИрдбреАрд╕реЙрд░реНрдкреЛрд░реЗрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ ("рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ" рдХрд╛ рд▓рдЧрднрдЧ рдХреИрдиреЛрдирд┐рдХрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдирд┐рдкрдЯрд╛рд░рд╛ рдЪрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реВрдЪрдХ рдХреЛ рд╢реВрдиреНрдп рдкрд░ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдПрдХ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ рдЖрд╡рд░рдг рд╡рд░реНрдЧ рд╣реИред
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
{
Wrapper wr = new Wrapper();
calc.DoCalculations(wr.Obj);
}
* This source code was highlighted with Source Code Highlighter .
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрдЧрд╛ рдХрд┐ рд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдбрд┐рд╕реНрдкреЛрдЬрд╝ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд, рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд▓рдкреЗрдЯреЗрдВред рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рдЧрд┐рд░рд╛рд╡рдЯ рдХреЗ рдХрд╛рд░рдг рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд░ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд░рд┐рд▓реАрдЬ рдмрд┐рд▓реНрдб рдореЗрдВ рдЕрдВрддрд░ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбреЛрдХрд▓рд╛рдХреБрд▓реЗрд╢рди рд╡рд┐рдзрд┐ рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХрдЪрд░рд╛ рдХреЗрдВрджреНрд░ рдХреЗ рд▓рд┐рдП рд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ "рдЬреАрд╡рд┐рдд" рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ DoCalculations рдХреЗ рджреМрд░рд╛рди wr рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдРрд╕рд╛ рд╣реА рд╣реБрдЖ) рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕реВрдЪрдХ рдЕрдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк DoCalculations рдХреЙрд▓ рдХреЛ (Wrapper wr =
new Wrapper ()) {...} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдореЗрдВ рдХреЙрд▓ рдХреЙрд▓ рд▓рд╛рд▓рдЪреА рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреЛ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ "рдЦрд╛рдиреЗ" рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣рдо Dispose рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, WPF рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдкрдХреНрд╖ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ), рддреЛ рд╣рдореЗрдВ DoCalculations рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж GC.KeepAlive (wr) рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдЕрдзрд┐рдХ рдХрдард┐рди рдерд╛ рдФрд░ рдЗрд╕рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рдирд╣реАрдВ рдерд╛ред
рдХреЗрд╡рд▓ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рджрд┐рдЦрд╛рдИ рджреА, рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдиреАрдЪреЗ рд╕реЗ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрджрд┐ рдЖрдк рдбрд┐рдмрдЧрд░ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддреНрд░реБрдЯрд┐ рджреЛрд╣рд░рд╛рдИ рдЬрд╛рдПрдЧреА)ред рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛, рд╕рднреА рд╕реНрдерд╛рдиреАрдп рд╕рдВрджрд░реНрдн рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдВрдХрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рд╡рд░реНрддрдорд╛рди рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдВрдд рддрдХ рдЬреАрд╡рд┐рдд рд░рд╣реЗрдВ, рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╣рд╛рдиреА реи
рдПрдХ рдмрд╛рд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдереА рдЬрд╣рд╛рдВ рдПрдХ рдкреНрд░рдмрдВрдзрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рджрд┐рдП рдЧрдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рд▓реЗрдЦрди рдХреЛрдб рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рд▓рд┐рдЦреА рдЧрдИ:
public string GetResource( string key)
{
Assembly assembly = Assembly .GetCallingAssembly();
return this .GetResource(assembly, key);
}
* This source code was highlighted with Source Code Highlighter .
.Net 4 рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреБрдЫ рд╕рдВрд╕рд╛рдзрди рдЕрдЪрд╛рдирдХ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдмрдВрдж рд╣реЛ рдЧрдПред рдФрд░ рдпрд╣рд╛рдБ рдлрд┐рд░, рдореБрджреНрджрд╛ рд░рд┐рд▓реАрдЬ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рдмрдиреЗрдЯ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 4 рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдиреНрдп рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдХреЛрдб рдореЗрдВ рдХреЙрд▓ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред
"рдЕрдВрддрд░ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП" рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ:
dll1:
public class Class1
{
public void Method1()
{
Console .WriteLine( new StackTrace());
}
}
dll2:
public class Class2
{
public void Method21()
{
this .Method22();
}
public void Method22()
{
( new Class1()).Method1();
}
}
dll3:
class Program
{
static void Main( string [] args)
{
( new Class3()).Method3();
}
}
class Class3
{
public void Method3()
{
( new Class2()).Method21();
}
}
* This source code was highlighted with Source Code Highlighter .
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдмреИрдЪ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдпрд╛ рдпрджрд┐ рдЖрдк рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ) рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдИрдорд╛рдирджрд╛рд░ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдорд┐рд▓рддрд╛ рд╣реИ:
in ClassLibrary1.Class1.Method1 ()
in ClassLibrary2.Class2.Method22 ()
in ClassLibrary2.Class2.Method21 ()
ConsoleApplication1.Class3.Method3 () рдореЗрдВ
ConsoleApplication1.Program.Main (рд╕реНрдЯреНрд░рд┐рдВрдЧ [] args) рдореЗрдВ
рдпрджрд┐ рдЖрдк .Net рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬрд╛рд░реА рдореЗрдВ 3.5 рд╕рдорд╛рд╡реЗрд╢реА рдХреЗ рддрд╣рдд рдмрдирд╛рддреЗ рд╣реИрдВ:
in ClassLibrary1.Class1.Method1 ()
in ClassLibrary2.Class2.Method21 ()
ConsoleApplication1.Program.Main (рд╕реНрдЯреНрд░рд┐рдВрдЧ [] args) рдореЗрдВ
рдФрд░ .Net 4 рд░рд┐рд▓реАрдЬ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╣рдо рд╕рднреА рдкрд░ рдорд┐рд▓реЗрдЧрд╛:
ConsoleApplication1.Program.Main (рд╕реНрдЯреНрд░рд┐рдВрдЧ [] args) рдореЗрдВ
рдиреИрддрд┐рдХ рд╕рд░рд▓ рд╣реИ - рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЛ рди рдмрд╛рдВрдзреЗрдВ, рди рд╣реА рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓реЙрдЧ рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯреИрдХ рдкрд░ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрд╡рд╛рдж рдХрд╛ рдХрд╛рд░рдг рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрджрд┐ рд╕реНрдЯреИрдХ рдореЗрдердб 1 рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдореЗрдВ рдЗрд╕реЗ (рдЕрдкрд╡рд╛рдж) рдореЗрдердб 1 рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдХрд╣реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЫреЛрдЯреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЖрдк рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдХрд┐рд╕реА рддрд░реАрдХреЗ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ [MethodImpl (MethodImplOptions.NoInlining)] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде, VC ++ рдореЗрдВ __decspecec (noinline) рдПрдирд╛рд▓реЙрдЧ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ред
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рдХреЗрд╡рд▓ рдХреАрдбрд╝реЗ рдХреА рд░рд┐рд╣рд╛рдИ рдореЗрдВ рдкреНрд░рдХрдЯ рджреБрдирд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╕реАрдо рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕рдХреА рдкреВрд░реНрдг рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВ рд╕рд┐рд░реНрдл рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдпрд╛ рдмрд▓реНрдХрд┐, рдЗрд╕рдХрд╛ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ред рдЦреИрд░, рдпрд╣ рдХреЗрд╡рд▓ рдкрд╛рдардХреЛрдВ рдХреЛ рдХрд╛рдо рдореЗрдВ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред