рд╡реАрдо рдПрдХреЗрдбрдореА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЗрдЦ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдереЛрдбрд╝рд╛ рдЖрдВрддрд░рд┐рдХ рдХрд┐рдЪрди рдЦреЛрд▓рдиреЗ рдФрд░ рдЖрдкрдХреЛ C # рдореЗрдВ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬрд┐рдирдХрд╛ рд╣рдо рдЕрдкрдиреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЗрд╕ рддрдереНрдп рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рджрд░реНрд╢рдХ рдиреМрд╕рд┐рдЦрд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рджреЗрдЦрдирд╛ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рдЦрд░рдЧреЛрд╢ рдЫреЗрдж рдХрд┐рддрдирд╛ рдЧрд╣рд░рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ C # рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рджреВрд╕рд░реА рдУрд░, рд╣рдо рдЕрдиреБрднрд╡реА рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕реБрдирдХрд░ рдЦреБрд╢ рд╣реЛрдВрдЧреЗ рдЬреЛ рдпрд╛ рддреЛ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЦрд╛рдорд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗред рд╡реЗ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдРрд╕реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдо рд╕рднреА рдХреЛ рдХреБрдЫ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЪрдпрди рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдпрд╛ рдмрд╕ рдореБрд╕реНрдХреБрд░рд╛рдПрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг 1
рд╕реА # рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдПрдВред рдЙрдирдХреЗ рд╕рд╛рде, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдЕрдХреНрд╕рд░ рд╕рд╡рд╛рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЕрдХреНрд╕рд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдирд▓рд╛рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдорд╛рдЗрдВрдбрдлреБрд▓рдиреЗрд╕ рдФрд░ рдЬреНрдЮрд╛рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд▓реЙрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рджреМрд░рд╛рди рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдлреА рд╡рд┐рд╖рдп рд╣реИред
рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
public struct SDummy : IDisposable { private bool _dispose; public void Dispose() { _dispose = true; } public bool GetDispose() { return _dispose; } static void Main(string[] args) { var d = new SDummy(); using (d) { Console.WriteLine(d.GetDispose()); } Console.WriteLine(d.GetDispose()); } }
рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдХрдВрд╕реЛрд▓ рдкрд░ рдХреНрдпрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧреА?рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрд╕рдбреАрдореА рдПрдХ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬреЛ рдЖрдИрдбреАрд╕реЙрдлрд╝рд╛рдпрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рддрд╛рдХрд┐ рдПрд╕рдбреАрдПрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
C # рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░
, рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдВрддрдд: рдмреНрд▓реЙрдХ рдореЗрдВ рдлреИрд▓рддрд╛ рд╣реИ:
try { Console.WriteLine(d.GetDispose()); } finally { ((IDisposable)d).Dispose(); }
рддреЛ, рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ, GetDispose () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмреВрд▓рд┐рдпрди рдлрд╝реАрд▓реНрдб рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЧрд▓рдд рд╣реИред рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
рдФрд░ рдлрд┐рд░ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдкред
рдЖрдЦрд┐рд░рдХрд╛рд░ рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рдЪрд▓ рд░рд╣реА рд╣реИ
((IDisposable)d).Dispose();
рдЖрдо рддреМрд░ рдкрд░ рдореБрдХреНрдХреЗрдмрд╛рдЬреА рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдВ (рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╢реАрд░реНрд╖ рджрд╛рдИрдВ рдУрд░, рдкрд╣рд▓реЗ C # рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ IL):
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдбрд┐рд╕реНрдкреЛрдЬрд╝ рд╡рд┐рдзрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдбреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВред
рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдкрд░ "рдЧрд▓рдд рдЭреВрдареА" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ? :)
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрдИ рдкреИрдХрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред рдПрд░рд┐рдХ рд▓рд┐рдкрд░реНрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (
рдпрд╣рд╛рдВ рдФрд░
рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ)ред
рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдХреЛрдИ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ (рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ), рд╕реНрдХреНрд░реАрди рдкрд░ "рдЧрд▓рдд рдЭреВрдареА" рдФрд░ "рдЧрд▓рдд рд╕рддреНрдп" рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рд╕реНрдкреЛрдЬрд╝ рдХреЛ рдЕрдм рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдФрд░ рдпрд╣рд╛рдБ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ!
рд╕реА # рд╕рдВрдХрд▓рдХ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
public struct SDummy : IDisposable { private bool _dispose; public void Dispose() { _dispose = true; } public bool GetDispose() { return _dispose; } private static void Main(string[] args) { SDummy sDummy = default(SDummy); SDummy sDummy2 = sDummy; try { Console.WriteLine(sDummy.GetDispose()); } finally { ((IDisposable)sDummy2).Dispose(); } Console.WriteLine(sDummy.GetDispose()); } }
рдПрдХ рдирдпрд╛ рдЪрд░ sDummy2 рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдбрд┐рд╕реНрдкреЛрдЬрд╝ () рдкрджреНрдзрддрд┐ рд▓рд╛рдЧреВ рд╣реИ!
рдпрд╣ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдЪрд░ рдХрд╣рд╛рдБ рд╕реЗ рдЖрдпрд╛?
рдЪрд▓рд┐рдП рдлрд┐рд░ рд╕реЗ
рдХрд▓реНрдкрдирд╛ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ:
'рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ (рдПрдХреНрд╕рдкреНрд░реЗрд╢рди) рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ' рдХреЗ рдлреЙрд░реНрдо рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдорд╛рди рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд┐рд╕реЛрд░реНрд╕ рдЯрд╛рдЗрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╕рдордп-рдкреНрд░рдХрд╛рд░ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ ... 'рд╕рдВрд╕рд╛рдзрди' рд╡реЗрд░рд┐рдПрдмрд▓ рдЗрди-рд▓рд╛рдЗрд╕реЗрдмрд▓ рд╣реИ, рдФрд░ рдЗрдирдмрд╛рдЙрдВрдб рдХрд┐рдП рдЧрдП рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЕрджреГрд╢реНрдп рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░ sDummy рд╡реИрд░рд┐рдПрдмрд▓ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдХреЗ рдПрдореНрдмреЗрдбреЗрдб рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЕрджреГрд╢реНрдп рдФрд░ рдЕрдкреНрд░рд╛рдкреНрдп рд╣реИ, рдФрд░ рдЗрд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдСрдкрд░реЗрд╢рди рджреВрд╕рд░реЗ sDummy2 рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдирддреАрдЬрддрди, рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдХрдВрд╕реЛрд▓ "рдЧрд▓рдд рдЭреВрдареА" рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреА рд╣реИ, рди рдХрд┐ "рдЧрд▓рдд рд╕рдЪ", рдЙрди рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреЛрдИ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЫрд┐рдкрд╛ рд╣реБрдЖ рдЪрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ: рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдмреБрд░рд╛рдИ рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛
рд╣реИ ред рдпрджрд┐ рд╡рд┐рд╖рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рд╣рдо рдЕрддреНрдпрдзрд┐рдХ рдЭрд╛рдВрдХрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдореВрд▓реНрдпрд╡рд╛рди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП
рд╕рд░реНрдЧреЗрдИрдЯреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг 2
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдФрд░ рдЙрдирдХреЗ рдХреЙрд▓ рдХрд╛ рдХреНрд░рдо рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рдореБрдЦреНрдп рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдХрднреА-рдХрднреА рдХреЙрд▓ рдХрд╛ рдРрд╕рд╛ рдХреНрд░рдо рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдХреНрд╖рдг рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ "рднрд░реЗрдВ"ред
рддреЛ, MyLogger рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
class MyLogger { static MyLogger innerInstance = new MyLogger(); static MyLogger() { Console.WriteLine("Static Logger Constructor"); } private MyLogger() { Console.WriteLine("Instance Logger Constructor"); } public static MyLogger Instance { get { return innerInstance; } } }
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ)ред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ MyLogger рд╡рд░реНрдЧ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ:
- рд╕реНрдЯреЗрдЯрд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ
- рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИ
- рдмрдВрдж рд╕реНрдерд┐рд░ рд╡реИрд░рд┐рдПрдмрд▓ рдЗрдирд░рд╕реНрдЯреЗрдВрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
- рдФрд░ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреА рдПрдХ рдЦреБрд▓реА рд╕реНрдереИрддрд┐рдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЛ рд╕рд░рд▓ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдЬреЛрдбрд╝рд╛ред
рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд╣рд░ (рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЬреИрд╕реА рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛) рд╣рдо рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреЗрдЯрд┐рдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
class Program { public static void Main() { var logger = MyLogger.Instance; } }
рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХреНрдпрд╛ рд╣реЛрдЧрд╛?рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдЧ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рджрд╕реНрдп (рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд┐рд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЛрдореЗрди рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХрдХреНрд╖рд╛ рд╕рджрд╕реНрдп - рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА рдУрд░ рд░реБрдЦ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕реНрдЯреИрдЯрд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд╣рд▓реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдХреНрд▓рд╛рд╕ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╛рдиреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╣реЛрдЧрд╛:
рд╕реНрдЯреЗрдЯрд┐рдХ рд▓реЙрдЧрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрддреЗ рд╣реИрдВ:
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
рд╕реНрдЯреЗрдЯрд┐рдХ рд▓реЙрдЧрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
рдРрд╕рд╛ рдХреИрд╕реЗ? рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдиреЗ рд╕реНрдЯреИрдЯрд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ?
рдЙрддреНрддрд░: рд╣рд╛рдБ!
рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИред
C # ECMA-334 рдорд╛рдирдХ рд╕реНрдЯреЗрдЯрд┐рдХ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрддрд╛рддрд╛ рд╣реИ:
17.4.5.1: "рдпрджрд┐ рдПрдХ рд╕реНрдерд┐рд░ рд░рдЪрдирд╛рдХрд╛рд░ ()17.11) рд╡рд░реНрдЧ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╕реНрдереИрддрд┐рдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╢реБрд░реБрдЖрддреА рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЙрд╕ рд╕реНрдереИрддрд┐рдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИред
...
17.11: ... рдпрджрд┐ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рд╡рд╛рд▓реЗ рдХреЛрдИ рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдЙрди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рд╕реНрдерд┐рд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рдкрд╛рдареНрдп рдХреНрд░рдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ(рдЬреЛ рдирд┐: рд╢реБрд▓реНрдХ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ: рдпрджрд┐ рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд░рдЪрдирд╛рдХрд╛рд░ рд╣реИ, рддреЛ рд╕реНрдереИрддрд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдг рддреБрд░рдВрдд рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдереИрддрд┐рдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
...
рдпрджрд┐ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░реНрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╝реАрд▓реНрдб рд╣реИ, рддреЛ рдРрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдХреНрд░рдо рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕реНрдЯреИрдЯрд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред)
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдереИрддрд┐рдХ рдХреНрд╖реЗрддреНрд░ рдЗрдирд░рд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИред рдИрд╕реАрдПрдордП рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛, рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рд╕реНрдерд┐рд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╣рдордд, рдХрд╛рдлреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░ рдлрд╝реАрд▓реНрдб рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рд╕реНрдерд┐рд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ BEFORE рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ:
class MyLogger { static MyLogger() { Console.WriteLine("Static Logger Constructor"); } public MyLogger() { Console.WriteLine("Instance Logger Constructor"); } } class Program { public static void Main() { var logger = new MyLogger(); } }
рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрдВрд╕реЛрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ:
рд╕реНрдЯреЗрдЯрд┐рдХ рд▓реЙрдЧрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░

рдЙрджрд╛рд╣рд░рдг 3
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЕрдХреНрд╕рд░ рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ (рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ, рд╕рд╣рд╛рдпрдХреЛрдВ, рдЖрджрд┐) рдХреЛ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЕрдХреНрд╕рд░ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдХреБрдЫ рд▓рд╛рдЗрдиреЗрдВ рд▓реЗрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдк рдиреАрд▓реЗ рд░рдВрдЧ рд╕реЗ рдмрд╛рд╣рд░ рднреА рдареЛрдХрд░ рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ (рдпрд╛рдиреА рдХрд┐ рд╕рдВрдЦреНрдпрд╛ рд╢реЗрд╖ рдХреЗ рдмрд┐рдирд╛ 2 рд╕реЗ рд╡рд┐рднрд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИ)ред
рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
static bool isOddNumber(int i) { return (i % 2 == 1); }
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 5.7 рдФрд░ 11 рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рдЪ рд╣реИред
IsOddNumber (-5) рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛?-5 рдПрдХ рд╡рд┐рд╖рдо рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рдЙрддреНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдореЗрдВ рдЧрд▓рдд рдорд┐рд▓рддрд╛ рд╣реИ!
рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реИред
MSDN рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╢реЗрд╖% рдбрд┐рд╡реАрдЬрди рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрд╛ рд╣реИ:
"рдкреВрд░реНрдгрд╛рдВрдХ рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рд▓рд┐рдП,% b рдХрд╛ рдкрд░рд┐рдгрд╛рдо - (a / b) * b" рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрд╛рджрд┐рдд рдореВрд▓реНрдп рд╣реИред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, a = -5, b = 2 рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
-5% 2 = (-5) - ((-5) / 2) * 2 = -5 + 4 = -1
рд▓реЗрдХрд┐рди -1 рд╣рдореЗрд╢рд╛ 1 рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЧрд▓рдд рдмрддрд╛рддрд╛ рд╣реИред
% рдСрдкрд░реЗрдЯрд░ рдСрдкрд░реЗрдВрдб рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдРрд╕реЗ "рдЖрд╢реНрдЪрд░реНрдп" рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдо рдХреА рддреБрд▓рдирд╛ рд╢реВрдиреНрдп рд╕реЗ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ:
static bool isOddNumber(int i) { return (i % 2 != 0); }
рдпрд╛ рд╕рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
static bool isEvenNumber(int i) { return (i % 2 == 0); } static bool isOddNumber(int i) { return !isEvenNumber(i); }
рдЙрджрд╛рд╣рд░рдг 4
C # рдореЗрдВ рдХреНрд░рдорд╛рджреЗрд╢рд┐рдд рд╕рднреА рд▓реЛрдЧ, рд╢рд╛рдпрдж LINQ рдХреЗ рд╕рд╛рде рдорд┐рд▓реЗ, рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдкреНрд░рд╢реНрди рдмрдирд╛рдиреЗ, рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ...
рд╣рдо LINQ рдХреЗ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред рд╢рд╛рдпрдж рд╣рдо рдЗрд╕реЗ рджреВрд╕рд░реА рдмрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдЗрд╕ рдмреАрдЪ, рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
int[] dataArray = new int[] { 0, 1, 2, 3, 4, 5 }; int summResult = 0; var selectedData = dataArray.Select( x => { summResult += x; return x; }); Console.WriteLine(summResult);
рдпрд╣ рдХреЛрдб рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рд╡реИрд░рд┐рдПрдмрд▓ рдпреЛрдЧ рдХрд╛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЕрд░реНрдерд╛рддреНред 0ред
рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реБрдЖ?
рдФрд░ рдХреНрдпреЛрдВрдХрд┐ LINQ рдХреНрд╡реЗрд░реА рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЗ рд▓реЙрдиреНрдЪ рджреЛ рдСрдкрд░реЗрд╢рди рд╣реИрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдиреБрд░реЛрдз рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЕрд░реНрде рдЗрд╕рдХреЗ рд▓реЙрдиреНрдЪ / рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдирд╣реАрдВ рд╣реИред
SumResult рдЪрд░ рдХрд╛ рдЪрдпрди рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдЕрдирд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: dataArray рд╕рд░рдгреА рдХреЗ рддрддреНрд╡ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ sumResult рдЪрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред
рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреЛрдб dataArray рдПрд░реЗ рдХреЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдпреЛрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди LINQ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЪрдпрдирд┐рдд рдбреЗрдЯрд╛ рдЪрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред Var рдХреАрд╡рд░реНрдб "рд╕рд┐рдиреНрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░" рд╣реИ, рдЬреЛ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЪрдпрдирд┐рдд рдкреНрд░рдХрд╛рд░ рдЪрд░ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ IEnumerable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╛рдиреА рд╣рдорд╛рд░рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
IEnumerable<int> selectedData = dataArray.Select( x => { summResult += x; return x; });
рдпрд╣рд╛рдВ рд╣рдо рдХреНрд╡реЗрд░реА (рдХреНрд╡реЗрд░реА) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрд╡реЗрд░реА рд╕реНрд╡рдпрдВ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕реА рддрд░рд╣, рдЖрдк SQL рдХреНрд╡реЗрд░реА рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдПрдВред
рдпрд╣реА рд╣реИ, рдЕрдм рддрдХ рд╣рдордиреЗ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрд░реЛрдз рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ sumResult рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддрд╛ рд╣реИред рдПрдХ рдХреНрд╡реЗрд░реА рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ToArray, ToList рдпрд╛ ToDictionary рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:
int[] dataArray = new int[] { 0, 1, 2, 3, 4, 5 }; int summResult = 0;
рдпрд╣ рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реИрд░рд┐рдПрдмрд▓ sumResult рдХреЗ рдорд╛рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рдбреЗрдЯрд╛рдЕрд░реЗ рд╕рд░рдгреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рдпреЛрдЧ рдХреЗ рдмрд░рд╛рдмрд░, 15 рдХреЗ рдмрд░рд╛рдмрд░ред
рд╣рдордиреЗ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ред рдФрд░ рдлрд┐рд░ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛?
int[] dataArray = new int[] { 0, 1, 2, 3, 4, 5 };
GroupedData рдЪрд░ (рдкрдВрдХреНрддрд┐ 3) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ IEnumerable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдЕрд░реЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╕рд╛рд░рд╛рдВрд╢ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рдпрд╣ рдЕрдиреБрд░реЛрдз рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, sumResult рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдХреЗрд╡рд▓ рдкрдВрдХреНрддрд┐ 2 рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдо рдЕрдкрдиреА рдЧрдгрдирд╛ рдореЗрдВ рдмрд╛рдХреА рд╕рдм рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдлрд┐рд░ рдЪрд░ рдпреЛрдЧ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЬреЛ рдХреНрд░рдорд╢рдГ 15 + 7 рд╣реИ, рдЕрд░реНрдерд╛рддред 22ред
рдЙрджрд╛рд╣рд░рдг 5
рд╣рдореЗрдВ рддреБрд░рдВрдд рдмрддрд╛рдПрдВ - рд╣рдо рдЕрдХрд╛рджрдореА рдореЗрдВ рдЕрдкрдиреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдореЗрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рд╣рдо рдордЬрд╛рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдлреА рдмреНрд░реЗрдХ рдХреЗ рджреМрд░рд╛рди рдЗрд╕рдХреА рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╕реНрддрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдпрд╣ рд╢рд╛рдпрдж рд╣реА рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╣реИ, рд╣рдордиреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдореБрд▓рд╛рдХрд╛рдд рдХреАред рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдореБрдЦреА рдкреНрд░рддрд┐рднрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ C рдФрд░ C ++ рдореЗрдВ, рд╕рд╛рде рд╣реА C # рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рддреЛ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ:
int i = (int)+(char)-(int)+(long)-1;
рдЪрд░ i рдХрд╛ рдорд╛рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛?рдЙрддреНрддрд░: рез
рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЕрдВрдХрдЧрдгрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдХрд╛рд░реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХреЗрдд "+" рдФрд░ "-" рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдордирд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
C # рдореЗрдВ, рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ 4 рдмрд╛рдЗрдЯреНрд╕ рд▓рдВрдмреЗ, 8 рд▓рдВрдмреЗ, рдЪрд╛рд░ 2 рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдлрд┐рд░ рдпрд╣ рд╕реЛрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рдХреЛрдб рдСрдлрд╝ рд▓рд╛рдЗрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреА:
int i = (4)+(2)-(4)+(8)-1;
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЭреВрдареЗ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:
int i = (int)+(char)-(int)+(long)-sizeof(int);
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ "+" рдФрд░ "-" рдХрд╛ рдЙрдкрдпреЛрдЧ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХрд░реА рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдорд╛рд░реА рд▓рд╛рдЗрди рдСрдл рдХреЛрдб, рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИ, рдЬреЛ рдПрдХрддрд░рдлрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
int i = (int)(

Veeam рдЕрдХрд╛рджрдореА рдореЗрдВ рд╕реАрдЦрдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ?
рдЕрдм рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ рд╕реА # рдкрд░ рд╡рд╕рдВрдд рдЧрд╣рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдЯ рд╣реИ, рдФрд░ рд╣рдо рд╕рднреА рдХреЛ
рд╡реАрдо рдЕрдХрд╛рджрдореА рдЕрдХрд╛рджрдореА рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдСрдирд▓рд╛рдЗрди рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
редрдпрд╣ рдХреЛрд░реНрд╕ 18 рдлрд░рд╡рд░реА, 2019 рдХреЛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдордИ рдХреЗ рдордзреНрдп рддрдХ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореБрдХреНрдд рд╣реЛрдЧрд╛ред рдЬреЛ рдХреЛрдИ рднреА рдкреНрд░рд╡реЗрд╢ рдкрд░реАрдХреНрд╖рд╛ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдЕрдХрд╛рджрдореА рд╡реЗрдмрд╕рд╛рдЗрдЯ:
academy.veeam.ru рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИ