рд╢рд╛рдмрд╛рд╢!
рдЕрд╕рд▓реА рдкреЗрд╢реЗрд╡рд░ рдорд╛рдорд▓реЗ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╕рдм рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ
рдХреНрдпрд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреАрдЫреЗ, рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдврдВрдХрд╛ рдЬрд╛рдП?
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд╡рд╣рд╛рдБ рдмреЗрд╣рддрд░ рд╣реИ, рд╡рд╣рд╛рдБ рдЖрд╕рд╛рди рд╣реИред рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!
1. рд╡рд┐рдзрд┐ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдирд╛
рдХреЛрдИ рдирд┐рдЬреА рддрд░реАрдХрд╛ рдирд╣реАрдВ - рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВред рдЖрдк рд╡рд┐рдзрд┐ рдкрд░ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
// For tests only. Do not use directly.
рдкреЗрд╢реЗрд╡рд░реЛрдВ: рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рд╡рд┐рдкрдХреНрд╖: рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднрд░рд╛ рд╣реБрдЖ рд╣реИ, рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдЧреНрд░рд╕реНрдд рд╣реИред
2. рд╡рд┐рдзрд┐ рдХреЛ рдЖрдВрддрд░рд┐рдХ рдмрдирд╛рдирд╛
рдпрд╣реА рд╣реИ, рд╣рдо
private
рд╕реЗ
internal
рддрдХ рдкрд╣реБрдВрдЪ рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдпрд╣рд╛рдБ рднреА рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рднреАрддрд░ рдХрд╣реАрдВ рд╕реЗ рднреА рд╕реБрд▓рдн рд╣реИред
рдФрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ? рдмрд╕ред рдЖрдкрдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ InternalsVoubleTo рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░реАрдХреНрд╖рдг рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕рднреА рдЖрдВрддрд░рд┐рдХ рддрд░реАрдХреЛрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреАред
рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐
InternalsVisibleTo
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдХрд╛рдордХрд╛рдЬ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ (рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг) рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рдордЬрдмреВрдд рдирд╛рдо рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдкреЗрд╢реЗрд╡рд░реЛрдВ: рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд╡рд╣рд╛рдБ рдирд┐рдпрдВрддреНрд░рдг рд░рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдЕрдВрджрд░реВрдиреА рд╣рд┐рд╕реНрд╕реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред
рд╡рд┐рдкрдХреНрд╖: рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрднреА рднреА рднрд░рд╛ рд╣реБрдЖ рд╣реИ, рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдЕрднреА рднреА рдЧреНрд░рд╕реНрдд рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ (рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рджреЗрдЦреЗрдВ), рд╡рд┐рд╢реЗрд╖рддрд╛ рд░рд┐рд▓реАрдЬрд╝ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдмрдиреА рд╣реБрдИ рд╣реИред
3. рд╡рд┐рдзрд┐ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдирд╛
private
рд╕рдВрд╢реЛрдзрдХ рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рдзрд┐ рдХреЛ
protected
рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд░реАрдХреНрд╖рдг рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ, рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдФрд░ - рд╡реЙрдЗрд▓рд╛ рд╕реЗ рдПрдХ рд╡рд╛рд░рд┐рд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА! - рдкреНрд░рд╛рдкреНрдд рд╡рд┐рдзрд┐ рддрдХ рдкрд╣реБрдВрдЪред
рдкреЗрд╢реЗрд╡рд░реЛрдВ: рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд╡рд┐рдзрд┐ рдкрд░ рдкрд╣реБрдВрдЪ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдкрд░ рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдг рд╣реИред
рд╡рд┐рдкрдХреНрд╖: рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡реИрд╕реЗ рднреА рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рд╡реИрд╕реЗ рднреА рдЧреНрд░рд╕реНрдд рд╣реИ, рдпрд╣ рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреЛ рд╕реАрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
4. PrivateObject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдпрд╣ рд╡рд░реНрдЧ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ NUnit рдпрд╛ рдХреБрдЫ рдФрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреАред
PrivateObject
рд╕рд╛рде
PrivateObject
рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рд╣реИ:
public class ClassToTest { private string field; private void PrintField() { Console.WriteLine(field); } }
рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ рд╣реИ:
[TestClass] public class TestClass { [TestMethod] public void TestPrivateMethod() { ClassToTest testedClass = new ClassToTest(); PrivateObject privateObject = new PrivateObject(testedClass); privateObject.SetField("field", "Don't panic"); privateObject.Invoke("PrintField"); } }
рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдХрдВрд╕реЛрд▓ рд▓рд╛рдЗрди рджреЗрдЦреЗрдЧрд╛
Don't panic
ред рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫреА рд╕рд▓рд╛рд╣, рд╕рд╣реА?
рдкреЗрд╢реЗрд╡рд░реЛрдВ: рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рд░рд▓ рдкрд░реНрдпрд╛рдкреНрддред
рд╡рд┐рдкрдХреНрд╖: рдХреЗрд╡рд▓ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдлрд╝реАрд▓реНрдб рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдкрд░реАрдХреНрд╖рдг рдЧрд┐рд░рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
5. рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛
рдХреЛрдб рдкрд┐рдЫрд▓реА рдкрджреНрдзрддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд┐рд░ рд╕реЗ, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рд╣реИ:
public class ClassToTest { private string field; private void PrintField() { Console.WriteLine(field); } }
рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
ClassToTest obj = new ClassToTest(); Type t = typeof(ClassToTest); FieldInfo f = t.GetField("field", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); f.SetValue(obj, "Don't panic"); t.InvokeMember("PrintField", BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, null, obj, null);
рдХрдВрд╕реЛрд▓ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЕрдЪреНрдЫреА рд╕рд▓рд╛рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо NUnit рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо Visual Studio Unit рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдПред
рдкреЗрд╢реЗрд╡рд░реЛрдВ: рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рд░рд▓, рдХрд┐рд╕реА рднреА рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реИред
рд╡рд┐рдкрдХреНрд╖: рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдХрд┐рд▓реЛрдореАрдЯрд░ рд╣реЛрдВрдЧреЗ, рдЬрдм рдлрд╝реАрд▓реНрдб рдФрд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдкрд░реАрдХреНрд╖рдг рдЧрд┐рд░рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рдЕрдм рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЧреИрд░-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ: рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдЗрд╕рдХреЗ рд▓рд┐рдП рддрд░реНрдХ:
- рдЧреИрд░-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдореЗрдВ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╛рд╣рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
- рдХрднреА-рдХрднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд╣рд░ рдЪреАрдЬ рдХреЛ рдкрд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХреА рдЧрдИ рдЕрдзрд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ, рдмреЗрд╣рддрд░ред
рдЗрд╕рдХреЗ рд╡рд┐рд░реБрджреНрдз рддрд░реНрдХ:
- рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ) рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рдХреЛрдб рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреЛрдб рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред
- рдпрджрд┐ рд╡рд┐рдзрд┐ рдирд┐рдЬреА рд╣реИ, рддреЛ рдпрд╣ рд╕рд┐рд░реНрдл рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЫреВрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЯреАрдо рдХреЗ рдЦрд┐рд▓рд╛рдл рдЦреЗрд▓рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред