.NET рдореЗрдВ рдЧреИрд░-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ

рдЫрд╡рд┐ рдХреНрдпрд╛ рдЖрдк рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдЕрдЪреНрдЫрд╛ рдЧрд░реНрдо рдПрд╣рд╕рд╛рд╕ рдкрд╕рдВрдж рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ?



рд╢рд╛рдмрд╛рд╢!



рдЕрд╕рд▓реА рдкреЗрд╢реЗрд╡рд░ рдорд╛рдорд▓реЗ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╕рдм рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдкреБрдЖрд▓ рдмрд┐рдЫрд╛рддреЗ рд╣реИрдВ ред



рдХреНрдпрд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреАрдЫреЗ, рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдврдВрдХрд╛ рдЬрд╛рдП?







рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд╡рд╣рд╛рдБ рдмреЗрд╣рддрд░ рд╣реИ, рд╡рд╣рд╛рдБ рдЖрд╕рд╛рди рд╣реИред рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!



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 рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдПред



рдкреЗрд╢реЗрд╡рд░реЛрдВ: рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рд░рд▓, рдХрд┐рд╕реА рднреА рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реИред

рд╡рд┐рдкрдХреНрд╖: рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдХрд┐рд▓реЛрдореАрдЯрд░ рд╣реЛрдВрдЧреЗ, рдЬрдм рдлрд╝реАрд▓реНрдб рдФрд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдкрд░реАрдХреНрд╖рдг рдЧрд┐рд░рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред



рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп




рдЕрдм рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЧреИрд░-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ: рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?



рдЗрд╕рдХреЗ рд▓рд┐рдП рддрд░реНрдХ:





рдЗрд╕рдХреЗ рд╡рд┐рд░реБрджреНрдз рддрд░реНрдХ:





рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЯреАрдо рдХреЗ рдЦрд┐рд▓рд╛рдл рдЦреЗрд▓рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



All Articles