.NET рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдо рдорд╛рди рдкреНрд░рдХрд╛рд░ред рднрд╛рдЧ 1

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛрдиреЛрдВ рдХреЗ рдЕрдВрддрд░ рдФрд░ рд▓рд╛рднреЛрдВ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВред рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдвреЗрд░ рдкрд░ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреА рджреБрдХрд╛рди рд╕рд╛рдордЧреНрд░реА рдФрд░ рд╕реНрдЯреИрдХ рдкрд░ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЧрд▓рдд рд╣реИред


рдЖрдЗрдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдВрддрд░реЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ:


  • рдПрдХ рдорд╛рди рдкреНрд░рдХрд╛рд░ : рдЗрд╕рдХрд╛ рдорд╛рди рд╕рдВрдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛ рд╣реИ ред рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реЛрддрд╛ рд╣реИред - рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рд╕рдВрд░рдЪрдирд╛: рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХреЗрддрд┐рдд рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рджреЛ рд╕рд┐рд╕реНрдЯрдо рдлрд╝реАрд▓реНрдб рднреА рд╣реЛрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдПрдХ 'SyncBlockIndex' рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдердбреНрд╕ рдЯреЗрдмрд▓ (VMT) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред
  • рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдРрд╕реЗ рддрд░реАрдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рдиреЗ рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред
  • рдЖрдкрдХреЛ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдвреЗрд░ рдкрд░ рдЬрдЧрд╣ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рдорд╛рди рдкреНрд░рдХрд╛рд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдврд╝рд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:


  • рджреЛрдиреЛрдВ рдЙрдкрд╡рд░реНрдЧ рд╡рд╕реНрддреБ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрди рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦреЗрдВред


рдпрд╣ рдЕрдзреНрдпрд╛рдп рд░реВрд╕реА рд╕реЗ рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рдФрд░ рдкреЗрд╢реЗрд╡рд░ рдЕрдиреБрд╡рд╛рджрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдЖрдк рд░реВрд╕реА рдпрд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдпрддрдГ рдЪреАрдиреА рдпрд╛ рдЬрд░реНрдорди рдореЗрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдЖрдк рд╣рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЧрд┐рддреБрдм рдкрд░ рдПрдХ рд╕реНрдЯрд╛рд░ рджреЗрдирд╛ рд╣реИ рдпрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдлреЛрд░реНрдХ рдХрд░рдирд╛ рд╣реИ github / sidristij / dotnetbook ред


рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦреЗрдВред


рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЬрд╛ рд░рд╣реА


рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


  • рдкреНрд░рддреНрдпреЗрдХ рдЪрд░, рд╡рд░реНрдЧ рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░ рдпрд╛ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рдореВрд▓реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ ;
  • рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдЪрд░, рд╡рд░реНрдЧ рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░ рдпрд╛ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдорд╛рди рдкреНрд░рдХрд╛рд░ рд▓реЗрддреЗ рд╣реИрдВ рдПрдХ рдореВрд▓реНрдп рдмрд┐рд▓реНрдХреБрд▓, рдЕрд░реНрдерд╛рдд рдПрдХ рдкреВрд░реА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдпрд╛ рдкрд╛рд╕ рдХрд░рдирд╛ рдорд╛рди рдХреЛ рдХреЙрдкреА рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдХреЙрдкреА рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рднреА рдореВрд▓ рд╡рд╣реА рд░рд╣реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдлрд╝реАрд▓реНрдб рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рднреА рднрд╛рдЧреЛрдВ рдХреЛ "рдкреНрд░рднрд╛рд╡рд┐рдд" рдХрд░реЗрдЧрд╛ред рдЖрдЗрдП рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ
рдЙрджрд╛рд╣рд░рдг:


DateTime dt = DateTime.Now; // Here, we allocate space for DateTime variable when calling a method, // but it will contain zeros. Next, let's copy all // values of the Now property to dt variable DateTime dt2 = dt; // Here, we copy the value once again object obj = new object(); // Here, we create an object by allocating memory on the Small Object Heap, // and put a pointer to the object in obj variable object obj2 = obj; // Here, we copy a reference to this object. Finally, // we have one object and two references. 

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдЕрд╕реНрдкрд╖реНрдЯ рдХреЛрдб рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐
рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреЛрдб рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди:


 // Let's declare a structure struct ValueHolder { public int Data; } // Let's create an array of such structures and initialize the Data field = 5 var array = new [] { new ValueHolder { Data = 5 } }; // Let's use an index to get the structure and put 4 in the Data field array[0].Data = 4; // Let's check the value Console.WriteLine(array[0].Data); 

рдЗрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЯреНрд░рд┐рдХ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕рдВрд░рдЪрдирд╛ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдХ рдирдпрд╛ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ 5 рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред MSIL рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рдгреА рдХреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдХреЛрдб рдЗрд░рд╛рджрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛: рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реЛрдЧрд╛
рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ 4 ред


рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛:


 // Let's declare a structure struct ValueHolder { public int Data; } // Let's create a list of such structures and initialize the Data field = 5 var list = new List<ValueHolder> { new ValueHolder { Data = 5 } }; // Let's use an index to get the structure and put 4 in the Data field list[0].Data = 4; // Let's check the value Console.WriteLine(list[0].Data); 

рдЗрд╕ рдХреЛрдб рдХрд╛ рд╕рдВрдХрд▓рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЖрдк list[0].Data = 4 рд▓рд┐рдЦрддреЗ рд╣реИрдВ list[0].Data = 4 рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдорд┐рд▓рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк List<T> рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдВрдЪ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИред рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд╕рд░рдгреА рд╕реЗ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд▓реЗрддрд╛ рд╣реИ ( List<T> рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ) рдФрд░ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЛ рдЗрд╕ рдкреНрд░рддрд┐ рдХреЛ рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рдЖрдк рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдЧреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рд╡реНрдпрд░реНрде рд╣реИред рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдирдХрд░ рдХрд┐ рд▓реЛрдЧ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:


 // Let's declare a structure struct ValueHolder { public int Data; } // Let's create a list of such structures and initialize the Data field = 5 var list = new List<ValueHolder> { new ValueHolder { Data = 5 } }; // Let's use an index to get the structure and put 4 in the Data field. Then, let's save it again. var copy = list[0]; copy.Data = 4; list[0] = copy; // Let's check the value Console.WriteLine(list[0].Data); 

рдпрд╣ рдХреЛрдб рдЗрд╕рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЕрддрд┐рд░реЗрдХ рдХреЗ рдмрд╛рд╡рдЬреВрдж рд╕рд╣реА рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реЛрдЧрд╛
рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ 4 ред


рдЕрдЧрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ "рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдореВрд▓реНрдп" рдХреНрдпрд╛ рд╣реИ
рдкреВрд░реА рд╕рдВрд░рдЪрдирд╛ тАЭ


 // Variant 1 struct PersonInfo { public int Height; public int Width; public int HairColor; } int x = 5; PersonInfo person; int y = 6; // Variant 2 int x = 5; int Height; int Width; int HairColor; int y = 6; 

рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдг рд╕реНрдореГрддрд┐ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдореВрд▓реНрдп рд╕рдВрдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдпрд╣ рдЕрдкрдиреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╣реИред


 // Variant 1 struct PersonInfo { public int Height; public int Width; public int HairColor; } class Employee { public int x; public PersonInfo person; public int y; } // Variant 2 class Employee { public int x; public int Height; public int Width; public int HairColor; public int y; } 

рдпреЗ рдЙрджрд╛рд╣рд░рдг рднреА рд╕реНрдореГрддрд┐ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд░рдЪрдирд╛ рд╡рд░реНрдЧреАрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд╛рди рд▓реЗрддреА рд╣реИред рдореИрдВ рдирд╣реАрдВ рдХрд╣рддрд╛ рдХрд┐ рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рди рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕рдВрд░рдЪрдирд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдмреЗрд╢рдХ, рдпрд╣ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЕрдиреБрдкрд▓рдмреНрдз рд╕реНрдореЙрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк (SOH) рдпрд╛ рд▓рд╛рд░реНрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк (LOH) рдкрд░ рд╣реИред рдПрдХ рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреЗрд╡рд▓ рд╕реВрдЪрдХ рдХрд╛ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: 32 рдпрд╛ 64-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ред


рдЖрдЗрдП рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред


 // Variant 1 struct PersonInfo { public int Height; public int Width; public int HairColor; } void Method(int x, PersonInfo person, int y); // Variant 2 void Method(int x, int HairColor, int Width, int Height, int y); 

рд╕реНрдореГрддрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЛрдб рдХреЗ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд╣реАрдВред рдпрд╣ рдХреЗрд╡рд▓ рддрд░реНрдХреЛрдВ рдХреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИред рдХреНрд░рдо рдмрджрд▓рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реНрдЯреИрдХ рдкрд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реНрдЯреИрдХ рдЙрдЪреНрдЪ рд╕реЗ рдирд┐рдореНрди рдкрддреЗ рддрдХ рдмрдврд╝рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЯреБрдХрдбрд╝реЗ рд╕реЗ рдзрдХреЗрд▓рдиреЗ рдХрд╛ рдХреНрд░рдо рдЗрд╕реЗ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдзрдХреЗрд▓рдиреЗ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред


рдУрд╡рд░рд░рд┐рдПрдб рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд


рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдЧрд▓рд╛ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдЖрднрд╛рд╕реА рдХреА рдХрдореА рд╣реИ
рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдПрдБред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐:


  1. рдЖрдк рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
  2. рдПрдХ рд╕рдВрд░рдЪрдирд╛ рджреВрд╕рд░реЗ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рджреЗ рд╕рдХрддреА рд╣реИред рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЖрдзрд╛рд░ рдХреНрд╖реЗрддреНрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд╣рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░рдЦрдирд╛ рд╣реИред рдПрдХ "рд╡рд┐рд░рд╛рд╕рдд" рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдПрдХ "рдЖрдзрд╛рд░" рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдмрд╛рдж рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рд░рд╛рд╕рдд рдкреИрджрд╛ рдХрд░реЗрдЧрд╛ред рджреЛрдиреЛрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдСрдлрд╕реЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЗрд▓ рдЦрд╛рдПрдВрдЧреЗред
  3. рдЖрдк рдорд╛рдирд╡рд░рд╣рд┐рдд рдХреЛрдб рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рджреЗрдВрдЧреЗред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдерд╛рди рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реА ++ рдореЗрдВ рд▓рд┐рдЦрд╛, рдмрд┐рдирд╛ рдмрджрд▓рд╛рд╡ рдХреЗред

рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдердб рдЯреЗрдмрд▓ рдХреА рдХрдореА рд╕рдВрд░рдЪрдирд╛рдУрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд "рдЬрд╛рджреВ" рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдШрдЯрд╛рддреА рд╣реИ рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЕрдиреНрдп рдлрд╛рдпрджреЗ рджреЗрддреА рд╣реИред рдкрд╣рд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг (.NET .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдмрд╛рд╣рд░) рдХреЗ рд▓рд┐рдП рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдж рд░рдЦреЗрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдореГрддрд┐ рд╣реИ
рд╕реАрдорд╛! рд╣рдо рдЕрдирд╡рд╛рдВрдЯреЗрдб рдХреЛрдб рд╕реЗ рдореЗрдореЛрд░реА рд░реЗрдВрдЬ рднреА рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд▓рдн рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛рд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рджреЛ рджреБрд░реНрдЧрдо рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред рдпреЗ SyncBlockIndex рдФрд░ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдердб рдЯреЗрдмрд▓ рдПрдбреНрд░реЗрд╕ рд╣реИрдВред рдпрджрд┐ рд╡реЗ рджреЛ рдХреНрд╖реЗрддреНрд░ рдорд╛рдирд╡ рд░рд╣рд┐рдд рдХреЛрдб рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЦрддрд░рдирд╛рдХ рд╣реЛрдЧрд╛ред рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдердбреНрд╕ рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╣рдорд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред


рдЖрдЗрдП рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреЗ рдмрд┐рдирд╛ рд╕рд┐рд░реНрдл рдПрдХ рдореЗрдореЛрд░реА рд░реЗрдВрдЬ рд╣реИред


 unsafe void Main() { int secret = 666; HeightHolder hh; hh.Height = 5; WidthHolder wh; unsafe { // This cast wouldn't work if structures had the information about a type. // The CLR would check a hierarchy before casting a type and if it didn't find WidthHolder, // it would output an InvalidCastException exception. But since a structure is a memory range, // you can interpret it as any kind of structure. wh = *(WidthHolder*)&hh; } Console.WriteLine("Width: " + wh.Width); Console.WriteLine("Secret:" + wh.Secret); } struct WidthHolder { public int Width; public int Secret; } struct HeightHolder { public int Height; } 

рдпрд╣рд╛рдВ, рд╣рдо рдЙрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдордЬрдмреВрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЗрдВ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣рдо рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рджреВрд╕рд░реЗ рдЕрд╕рдВрдЧрдд рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдЧреБрдкреНрдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдПрдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛, рдЬреЛ рдХрд┐ Main() рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рднреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рдЙрд▓реНрд▓рдВрдШрди рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреАрдЬреЗрдВ рдЗрддрдиреА рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрдирд╡рд╛рдВрдЯреЗрдб рдХреЛрдб рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдирд╣реАрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдХрд╛рд░рдг рдереНрд░реЗрдб рд╕реНрдЯреИрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдХреЛрдИ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд░рдХреЗ рдЗрди рд╣рдорд▓реЛрдВ рд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдмрдЪрд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛, рдЖрдк рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреА рд╡рд╛рдкрд╕реА рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП EBP рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ред рд╣рдо рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреНрдпрд╛ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИред "рдЧреБрдкреНрдд" рдЪрд░ hh рдЪрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж WidthHolder рд╕рдВрд░рдЪрдирд╛ (рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ) рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдЖрд╕рд╛рдиреА рд╕реЗ рдХреНрдпреЛрдВ рдорд┐рд▓рд╛? рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ рдмрдврд╝рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдЪрд░ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрддреЗ рд╣реЛрдВрдЧреЗ, рдФрд░ рдмрд╛рдж рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдкрддреЗ рдХрдо рд╣реЛрдВрдЧреЗред


рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рд╡реНрдпрд╡рд╣рд╛рд░


рджреЛрдиреЛрдВ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреЙрд▓рд┐рдВрдЧ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред


 // The example with a reference type class FooClass { private int x; public void ChangeTo(int val) { x = val; } } // The example with a value type struct FooStruct { private int x; public void ChangeTo(int val) { x = val; } } FooClass klass = new FooClass(); FooStruct strukt = new FooStruct(); klass.ChangeTo(10); strukt.ChangeTo(10); 

рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рдпрд╣ рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╕рдВрдХрд▓рд┐рдд рдирд┐рдХрд╛рдп рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХрд╛ рдЕрдкрдирд╛ рд╕рдВрдХрд▓рд┐рдд рд╕реЗрдЯ рд╣реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╡рд┐рдзрд┐ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЙрд╕реА рддрд░рд╣ рд╣реЛрдЧрд╛ рдЬреИрд╕рд╛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛ред рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЖрднрд╛рд╕реА рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред


 // An example with a reference type class FooClass { public int x; } // An example with a value type struct FooStruct { public int x; } public void ChangeTo(FooClass klass, int val) { klass.x = val; } public void ChangeTo(ref FooStruct strukt, int val) { strukt.x = val; } FooClass klass = new FooClass(); FooStruct strukt = new FooStruct(); ChangeTo(klass, 10); ChangeTo(ref strukt, 10); 

рдореБрдЭреЗ рд░реЗрдлрд░реА рдХреАрд╡рд░реНрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдореВрд▓ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред рдлрд┐рд░ рдореИрдВ рдЗрд╕реЗ рдмрджрд▓ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореВрд▓ рд╡рд╣реА рд░рд╣реЗрдЧрд╛ред рдореБрдЭреЗ рдПрдХ рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рдХреЙрд▓рд░ (рджреВрд╕рд░реА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐) рдореЗрдВ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдХреЙрд▓рд░ рдЗрд╕ рдорд╛рди рдХреЛ рдЪрд░ (рдПрдХ рдФрд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐) рдореЗрдВ рд╡рд╛рдкрд╕ рдмрдЪрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдердб рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореВрд▓ рдХреЛ рд╕реАрдзреЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдкреНрд░реЛрд╕реЗрд╕рд░-рд╕реНрддрд░реАрдп рдСрдкрд░реЗрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред Ref, C # рджреБрдирд┐рдпрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдФрд░ рдирд╣реАрдВред


рддрддреНрд╡реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред


рджреЛрдиреЛрдВ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХреНрд╖реЗрддреНрд░ рдХреА рдСрдлрд╕реЗрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдПрдХ рдФрд░ рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рдХрдИ рдЙрджреНрджреЗрд╢реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:


  • рдЕрдкреНрд░рдпреБрдХреНрдд рджреБрдирд┐рдпрд╛ рдореЗрдВ рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкреНрд░рдпреБрдХреНрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд┐рдирд╛;
  • ( [FieldOffset(0)] ) рдкреНрд░рдХрд╛рд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХрд▓рдХ рдХреЛ рдирд┐рд░реНрджреЗрд╢ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рддреЗрдЬ рдХрд░ рджреЗрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝реАрд▓реНрдб рд╣реИ, рддреЛ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╢реВрдиреНрдп рдСрдлрд╝рд╕реЗрдЯ рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдердбреНрд╕ рдЯреЗрдмрд▓ рдХрд╛ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 1 рдорд╢реАрди рд╢рдмреНрдж рд▓рдЧрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЗ рдкрд╣рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЬрдЯрд┐рд▓ рдкрддреЗ (рдкрддреЗ + рдСрдлрд╕реЗрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб рдПрдХ рдЖрднрд╛рд╕реА рддрд░реАрдХреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрддрд╛ рд╣реИред рд╕рднреА рдЖрднрд╛рд╕реА рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ;
  • рдПрдХ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╣реА рдореВрд▓реНрдп рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред C ++ рдореЗрдВ рдпрд╣ рдбреЗрдЯрд╛ рдЯрд╛рдЗрдк рдПрдХ рдпреВрдирд┐рдпрди рдХрд╣рд▓рд╛рддрд╛ рд╣реИ;
  • рдХреБрдЫ рднреА рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╣рдордд рдирд╣реАрдВ рдЙрдард╛рдиреА рдЪрд╛рд╣рд┐рдП: рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдЦреЗрддреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЦреЗрддреЛрдВ рдХрд╛ рдЕрдВрддрд┐рдо рдХреНрд░рдо рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдЯрд┐рдкреНрдкрдгреА


  • рдСрдЯреЛ : рд░рди-рдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рд╡рд░реНрдЧ рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд╛рди рдФрд░ рдПрдХ рдкреИрдХрд┐рдВрдЧ рдЪреБрдирддрд╛ рд╣реИред рдЗрд╕ рдЧрдгрдирд╛ рдХреЗ рдПрдХ рд╕рджрд╕реНрдп рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдореЗрдВ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдПрдХ рдЕрдкрд╡рд╛рдж рдкреИрджрд╛ рдХрд░реЗрдЧрд╛;
  • рд╕реНрдкрд╖реНрдЯ : рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ FieldOffsetAttribute рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рдЯреАрдХ рд╕реНрдерд╛рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ;
  • рдЕрдиреБрдХреНрд░рдорд┐рдХ : рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рджрд╕реНрдп рдХреНрд░рдордмрджреНрдз рдХреНрд░рдо рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рджреМрд░рд╛рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред StructLayoutAttribute.Pack рдПрдХ рдкреИрдХрд┐рдВрдЧ рдХрджрдо рдХреЗ рдореВрд▓реНрдп рдЙрдирдХреЗ рд╕реНрдерд╛рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЕрдкреНрд░рдпреБрдХреНрдд рд╕рдВрд░рдЪрдирд╛ рдлрд╝реАрд▓реНрдб рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП FieldOffset рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдорд╛рдирд╡ рд░рд╣рд┐рдд рджреБрдирд┐рдпрд╛ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдЖрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред C / C ++ рдореЗрдВ, рд╣рдо рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдХрд░ рдЗрди рдЕрдВрддрд░рд╛рд▓реЛрдВ рдХреЛ рднрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдЖрд░рдХреНрд╖рд┐рдд 1, рдЖрд░рдХреНрд╖рд┐рдд 2, ... рд╣рд╛рд▓рд╛рдБрдХрд┐, .NET рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ FieldOffsetAttribute рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ [StructLayout(LayoutKind.Explicit)] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдСрдлрд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред


 [StructLayout(LayoutKind.Explicit)] public struct SYSTEM_INFO { [FieldOffset(0)] public ulong OemId; // 92 bytes reserved [FieldOffset(100)] public ulong PageSize; [FieldOffset(108)] public ulong ActiveProcessorMask; [FieldOffset(116)] public ulong NumberOfProcessors; [FieldOffset(124)] public ulong ProcessorType; } 

рдПрдХ рдЕрдВрддрд░ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд▓реЗрдХрд┐рди рдЕрдкреНрд░рдпреБрдХреНрдд рд╕реНрдерд╛рди рд╣реИред рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЖрдХрд╛рд░ 132 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ рди рдХрд┐ 40 рдмрд╛рдЗрдЯреНрд╕ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╢реБрд░реБрдЖрдд рд╕реЗ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред


рд╕рдВрдШ


FieldOffsetAttribute рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк C / C ++ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╕рдВрдШ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрд╕реА рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдирд┐рдХрд╛рдп рд╣реИрдВ
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ред рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:


 // If we read the RGBA.Value, we will get an Int32 value accumulating all // other fields. // However, if we try to read the RGBA.R, RGBA.G, RGBA.B, RGBA.Alpha, we // will get separate components of Int32. [StructLayout(LayoutKind.Explicit)] public struct RGBA { [FieldOffset(0)] public uint Value; [FieldOffset(0)] public byte R; [FieldOffset(1)] public byte G; [FieldOffset(2)] public byte B; [FieldOffset(3)] public byte Alpha; } 

рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗрд╡рд▓ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдУрд╡рд░рд▓реИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдФрд░ рдПрдХ рдорд╛рди рдкреНрд░рдХрд╛рд░:


 class Program { public static void Main() { Union x = new Union(); x.Reference.Value = "Hello!"; Console.WriteLine(x.Value.Value); } [StructLayout(LayoutKind.Explicit)] public class Union { public Union() { Value = new Holder<IntPtr>(); Reference = new Holder<object>(); } [FieldOffset(0)] public Holder<IntPtr> Value; [FieldOffset(0)] public Holder<object> Reference; } public class Holder<T> { public T Value; } } 

рдореИрдВрдиреЗ рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЕрдЧрд░ рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛
рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдбреЛрдореЗрди рдореЗрдВ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдкреНрд░рдХрд╛рд░ TypeLoadException рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рдЙрд▓реНрд▓рдВрдШрди рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░, рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд▓рдЧ-рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдПрдХ рд╕рдВрд░рдХреНрд╖рд┐рдд рдбреЛрдореЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ TypeLoadException ред


рдЖрд╡рдВрдЯрди рдореЗрдВ рдЕрдВрддрд░


рдПрдХ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреА рд╣реИ рд╡рд╣ рд╣реИ рд╡рд╕реНрддреБрдУрдВ рдпрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрдиред рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ CLR рдХреЛ рдХрдИ рдЪреАрдЬреЛрдВ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдЖрдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ 85K рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╣реИ? рдпрджрд┐ рдпрд╣ рдХрдо рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SOH рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЦрд╛рд▓реА рд╕реНрдерд╛рди рд╣реИ? рдпрджрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╣реИ, рд╕реАрдПрд▓рдЖрд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреНрд░рд╛рдл рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреНрд▓реАрдпрд░ рдХрд┐рдП рдЧрдП рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рдХрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдПрд╕рдУрдПрдЪ рдкрд░ рдЕрднреА рднреА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдкреЗрдЬ рдХрд╛ рдЖрд╡рдВрдЯрди рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдХрдЪрд░реЗ рд╕реЗ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕реНрдерд╛рди рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ, CLR SyncBlockIndex рдФрд░ VirtualMethodsTable рдХреЛ рдЦреЛ рджреЗрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рд╕рдВрджрд░реНрдн рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЗрддрд╛ рд╣реИред


рдпрджрд┐ рдХреЛрдИ рдЖрдмрдВрдЯрд┐рдд рд╡рд╕реНрддреБ 85K рд╕реЗ рдмрдбрд╝реА рд╣реИ, рддреЛ рдпрд╣ рдмрдбрд╝реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣реАрдк (LOH) рдореЗрдВ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдмрдбрд╝реЗ рддрд╛рд░ рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдпрд╣рд╛рдВ, рд╣рдореЗрдВ рдХрд┐рд╕реА рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХреА рд╢реНрд░реЗрдгреА рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рдирдП рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЬрд▓реНрджреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдирд┐рдкрдЯрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рд╣рдо рдпрд╣рд╛рдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред


RefTypes рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ:


  • RefType <85K, SOH рдкрд░ рд╕реНрдерд╛рди рд╣реИ: рддреНрд╡рд░рд┐рдд рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди;
  • RefType <85K, SOH рдкрд░ рд╕реНрдерд╛рди рдмрд╛рд╣рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ: рдмрд╣реБрдд рдзреАрдореА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди;
  • RefType> 85K, рдзреАрдореА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрдиред

рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рджреБрд░реНрд▓рдн рд╣реИрдВ рдФрд░ ValTypes рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдЖрдмрдВрдЯрди рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХреЗ рдЖрд╡рдВрдЯрди рдореЗрдВ рдХреБрдЫ рднреА рдЦрд░реНрдЪ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣реЛрддреА рд╣реИ, рд╡рд╣ рдлрд╝реАрд▓реНрдб рдХреЛ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░ рд░рд╣реА рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ: 1. рдЬрдм рдХреЛрдИ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдПрдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди рдХрд╛ рд╕рдордп рд╢реВрдиреНрдп рдХреЗ рдХрд░реАрдм рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрди рдХрд╛ рд╕рдордп рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; 2. рдпрджрд┐ ValTypes рдХреЛ рдЦреЗрддреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Reftypes рдЦреЗрддреЛрдВ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛ рджреЗрдЧрд╛ред рдПрдХ рдорд╛рди рдкреНрд░рдХрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИ; 3. рдЬреИрд╕рд╛ рдХрд┐ рдирдХрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ ValTypes рдХреЛ рд╡рд┐рдзрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рд╕реНрдерд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдЕрдВрддрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдЪрд░ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред


рдПрдХ рд╡рд░реНрдЧ рдпрд╛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмреАрдЪ рдХрд╛ рдЪреБрдирд╛рд╡


рдЖрдЗрдП рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ рдФрд░ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдВред рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдпрд╣ 16 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЗ рджреМрд░рд╛рди рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рд╕реЗ рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ред рдореИрдВ рдорд╛рдкрджрдВрдб рдХреЗ рддреАрди рд╕рдореВрд╣реЛрдВ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ:


  • рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрд╛рддрдЪреАрдд рдХрд░реЗрдЧрд╛;
  • рдЗрд╖реНрдЯрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░;
  • рдЬрдм рдХреЛрдИ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рди рд╣реЛред

рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЗрд╕рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдирд╛рдо рдпрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рд╡рд┐рдзрд┐рдпреЛрдВ, рдЧреБрдгреЛрдВ) рд╕реЗ рдирд╣реАрдВ рдирд┐рдкрдЯрддрд╛ рд╣реИред рдПрдХ рдореВрд▓реНрдп рдФрд░ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддреБ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рд╕рд┐рд╕реНрдЯрдо рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд░реНрдЧ рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


  1. рдпрджрд┐ рдЖрдкрдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рдХрд╛рд░ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдореВрд▓реНрдп рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдХреГрддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░рдВрддрд░ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИред рд╣рдо рдХреБрдЫ рдСрдлрд╕реЗрдЯреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдХреЗ рдЗрд╕ рдирд┐рд░рдВрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛, рд╣рдо рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдореЗрдВ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░ рдорд╛рди рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд░реЗрдлрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рд╕рдВрджрд░реНрдн рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдлрд╝реАрд▓реНрдб рдорд┐рд▓реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдореИрдВ рдЬреЛ рдмрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдЕрд░реНрде рд╣реИред рдореИрдВ рдХрдИ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред


    • рдбреЗрдЯрдЯрд╛рдЗрдо рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рд╕рдордп рдореЗрдВ рдПрдХ рдкрд▓ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдШреЗрд░ рд▓реЗрддреА рд╣реИред рдпрд╣ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдпреВрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдордп, рд╡рд░реНрд╖, рдорд╛рд╣, рджрд┐рди, рдШрдВрдЯрд╛, рдорд┐рдирдЯ, рд╕реЗрдХрдВрдб, рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЯрд┐рдХ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдПрдирдХреИрдкреНрд╕рд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╣рдо рд╕рдордп рдореЗрдВ рдПрдХ рдкрд▓ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред рдореИрдВ рдЕрдЧрд▓реЗ рдорд┐рдирдЯ рдирд╣реАрдВ рдЬреА рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрдЪрдкрди рдореЗрдВ рдореЗрд░рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЬрдиреНрдорджрд┐рди рдерд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╣рдо рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЪреБрдирддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдХрдХреНрд╖рд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЧреБрдгреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдпрд╛, рд╣рдо рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреА рд╣реИ: рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдПрдХ рд╕рдордп рдХреА рддрд░рд╣, рдПрдХ рдирдВрдмрд░ рдХреА рддрд░рд╣ рд╣реИред рдЖрдк рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рдФрд░ рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕рдордп рдореЗрдВ рдПрдХ рдФрд░ рдХреНрд╖рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдореВрд▓ рд╕реЗ рдПрдХ рджрд┐рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓реЗрдЧрд╛ред
    • KeyValuePair<TKey, TValue> рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рдПрдХ рдЬреБрдбрд╝реЗ рд╣реБрдП рдХреБрдВрдЬреА - рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдПрдирдХреЛрдб рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдХреЗрд╡рд▓ рдЧрдгрдирд╛ рдХреЗ рджреМрд░рд╛рди рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рдореВрд▓реНрдп Dictionary<T> рдореЗрдВ рдЕрд╡рд┐рднрд╛рдЬреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рдЕрдВрджрд░ рдПрдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рдХреБрдВрдЬреА рдПрдХ рдореВрд▓реНрдп рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреА рд╣реИред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдЕрд╡рд┐рднрд╛рдЬреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдФрд░ рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЕрд░реНрде рд╣реИред рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдореВрд▓реНрдп рд╣реИред рдпрджрд┐ рдХреЛрдИ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкреВрд░реА рдЬреЛрдбрд╝реА рдмрджрд▓ рдЬрд╛рдПрдЧреАред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡реЗ рдПрдХ рдЗрдХрд╛рдИ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдПрдХ рдЖрджрд░реНрд╢ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рддрд╛ рд╣реИред

  2. рдпрджрд┐ рдЖрдкрдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рдХрд╛рд░ рдмрд╛рд╣рд░реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЕрд╡рд┐рднрд╛рдЬреНрдп рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЕрднрд┐рдиреНрди рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рдЧрд▓рдд рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕рдордЭрд╛рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд╣рдирд╛ рд╕рд╣реА рд╣реИ рдХрд┐ рдПрдХ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб рдкреНрд░рдХрд╛рд░ рдмрд╛рд╣рд░реА рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИред рдпрд╣ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред


    • рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдПрдХ рдлрд╛рдЗрд▓ рд╣реЗрдбрд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдлрд╛рдЗрд▓ рд╕реЗ рджреВрд╕рд░реА рдлрд╛рдЗрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рд╣реЗрдбрд░ред рдЯреЗрдХреНрд╕реНрдЯ рдлрд╛рдЗрд▓ред рдпрд╣ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ рдЬрдм рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдП, рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдХреЗ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдВрдбреЛрдЬ рдУрдПрд╕ рдореЗрдВ рд╢реЙрд░реНрдЯрдХрдЯ рдлрд╛рдЗрд▓реЗрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╣рдо рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬреЗрдкреАрдИрдЬреА рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░ рдЬрд┐рд╕рдореЗрдВ рдореЗрдЯрд╛рдбрд╛рдЯрд╛ рд╣реЛрддрд╛ рд╣реИ рдПрдХ рдЫрд╡рд┐ рдЖрдХрд╛рд░, рд╕рдВрдкреАрдбрд╝рди рд╡рд┐рдзрд┐рдпреЛрдВ, рдлреЛрдЯреЛрдЧреНрд░рд╛рдлреА рдкреИрд░рд╛рдореАрдЯрд░, рдЬреАрдкреАрдПрд╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдЕрдиреНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ), рддреЛ рд╣рдореЗрдВ рд╣реЗрдбрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕рднреА рд╣реЗрдбрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдорд┐рд▓ рдЬрд╛рдПрдЧреА рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИред рд╕рд░рд▓ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд *(Header *)readedBuffer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ *(Header *)readedBuffer рдмрд┐рдирд╛ *(Header *)readedBuffer рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рд╕реЗ рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд░реЗ рд╣реБрдП рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдорд┐рд▓реЗрдВрдЧреЗред


  1. рди рддреЛ рдЙрджрд╛рд╣рд░рдг рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рд╡реЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЗрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡реЗ рд╕реНрд╡рдпрдВрднреВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рд╣рдо рдХреЛрдб рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд┐рдХрд▓реНрдк рдХреЛ рджреВрд╕рд░реА рддрд░рдл рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ:
  2. рдпрджрд┐ рд╣рдореЗрдВ рдорд╛рдирд╡рд░рд╣рд┐рдд рдХреЛрдб рд╕реЗ рдХреБрдЫ рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЪреБрдирдиреА рдЪрд╛рд╣рд┐рдПред рд╣рдо рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдкрджреНрдзрддрд┐ рд╕реЗ рднреА рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред
  3. рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдЖрдкрдХреА рдкрд╕рдВрдж рд╣реИ рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдореЗрдВ рдбреЗрдЯрд╛ (рдЬреИрд╕рд╛ рдорд╛рди рд▓реМрдЯрд╛ рдпрд╛ рдПрдХ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ) рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рд╕рдорд╛рди рдореВрд▓реНрдп рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рд╣реА рдЙрджрд╛рд╣рд░рдг рдЯреНрдпреВрдкрд▓реНрд╕ рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ tuples рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ ValueTuple рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд┐рдзрд┐ рдвреЗрд░ рдкрд░ рдЬрдЧрд╣ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдзрд╛рдЧреЗ рдХреЗ рдвреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЬрд╣рд╛рдВ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдореЗрдВ рдХреБрдЫ рднреА рдЦрд░реНрдЪ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
  4. рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдФрд░ рдЬреАрд╡рдирдХрд╛рд▓ рд╡рд╛рд▓реЗ рдмрдбрд╝реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИ, рддреЛ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдкреВрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдкреВрд▓ рдХреЗ рдмрд┐рдирд╛, рдвреЗрд░ рдкрд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдХрдЪрд░рд╛ рд╕рдВрдЪрдп рдХреЗ рд▓рд┐рдПред рдЬреАрд╕реА рдкрд░ рд▓реЛрдб рдмрдврд╝рдиреЗ рд╕реЗ рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреБрд░рд╛рдиреА рдкреАрдврд╝рд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗред рдРрд╕реЗ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ) рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╡реГрджреНрдзрд┐ рджреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рднреА рдПрд╕рдУрдПрдЪ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЬреАрд╕реА рдкрд░ рд▓реЛрдб рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛;

рдореИрдВрдиреЗ рдЬреЛ рдХрд╣рд╛ рд╣реИ, рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реБрдП, рдпрд╣рд╛рдБ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕рд▓рд╛рд╣ рджреА рдЧрдИ рд╣реИ:


  1. рд╕рдВрдЧреНрд░рд╣ рдЪреБрдирддреЗ рд╕рдордп рдЖрдкрдХреЛ рдмрдбрд╝реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрдбрд╝реЗ рд╕рд░рдгрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдореЗрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рдмрдбрд╝реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣реАрдк рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдЦрдВрдбрди рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕реЛрдЪрдирд╛ рдЧрд▓рдд рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдмрд╛рдЗрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ 4 рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ, рддреЛ 4 рдмрд╛рдЗрдЯреНрд╕ рд▓рдЧреЗрдВрдЧреЗред рд╣рдореЗрдВ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░ 4 рдмрд╛рдЗрдЯреНрд╕ рд╕реАрдорд╛рдУрдВ рдкрд░ рд╕рдВрд░реЗрдЦрд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдкреНрд░рддреНрдпреЗрдХ рдкрддрд╛ рдлрд╝реАрд▓реНрдб рдХреЛ 4 рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП) рдФрд░ 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ - 8 рдмрд╛рдЗрдЯреНрд╕ рд╕реАрдорд╛рдУрдВ рдкрд░ред рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдПрдХ рдордВрдЪ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдирд╛ред 4 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ - 85K / (4 рд╕реЗ 8 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддрд┐ рдлрд╝реАрд▓реНрдб * рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ = 4) рдорд╛рдЗрдирд░ рд╣реЗрдбрд░ рдХрд╛ рдЖрдХрд╛рд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рддрд┐ рдПрд░реЗ рд▓рдЧрднрдЧ 2 600 рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ (рдЗрд╕реЗ рдиреАрдЪреЗ рд░рд╛рдЙрдВрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП) )ред рд╡рд╣ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ 20,000 рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рдЬрд╛рджреВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ
  2. рдХрднреА-рдХрднреА рдЖрдк рдбреЗрдЯрд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдПрдХ рдкреНрд░рддрд┐ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рд╣рдЬрд╝рд╛рд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╣реЛрддрд╛ рд╣реИред рддрдм рдЖрдк рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкреАрдврд╝реА рд╢реВрдиреНрдп рдХреА рд╕реВрдЬрди рдФрд░ рдкреАрдврд╝реА рдПрдХ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреЛ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред рдпрджрд┐ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЕрд╡рдзрд┐ рдХрдо рд╣реЛрддреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреАрд╕реА рдЙрдиреНрд╣реЗрдВ рдкреАрдврд╝реА рд╢реВрдиреНрдп рдкрд░ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдЧрд╛ - 1 рдПрдордПрд╕ рдХреЗ рд▓рд┐рдП, рддреЛ рдЖрдк рдирд┐рд░рд╛рд╢ рд╣реЛрдВрдЧреЗред рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдФрд░ рджреЛ рдкреАрдврд╝реА рдореЗрдВ рд╣реИрдВред рдЗрд╕рд╕реЗ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЬреАрд╕реА 1 рдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рдкреАрдврд╝реА рд╢реВрдиреНрдп рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдФрд░ рджреЛ рдкреАрдврд╝рд┐рдпреЛрдВ рдХреЛ рдмрд╣реБрдд рдзреАрд░реЗ рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рджрдХреНрд╖рддрд╛ рдореЗрдВ рдХрдореА рдЖрдПрдЧреА;
  3. рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдкрдХреЛ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдбрд╝реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╕рднреА рддрддреНрд╡ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпреЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдкрд░ рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рд▓реЗ рд▓реЗрдВрдЧреЗ рдФрд░ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ StackOverflowException рджреНрд╡рд╛рд░рд╛ рдореМрдд рдХреЗ рд▓рд┐рдП рд▓рд╛рдПрдВрдЧреЗред рдЕрдЧрд▓рд╛ рдХрд╛рд░рдг рдкреНрд░рджрд░реНрд╢рди рд╣реИред рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ рдЙрддрдиреА рд╣реА рдзреАрд░реЗ-рдзреАрд░реЗ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЗрд╕реАрд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪреБрдирд╛рд╡ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдХреНрд╕рд░, рдпрд╣ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреА рд╕реНрдерд┐рддрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рднреАрддрд░ рдЖрддреА рд╣реИ, рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред


рдпрд╣ рдЕрдзреНрдпрд╛рдп рд░реВрд╕реА рд╕реЗ рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рдФрд░ рдкреЗрд╢реЗрд╡рд░ рдЕрдиреБрд╡рд╛рджрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдЖрдк рд░реВрд╕реА рдпрд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдпрддрдГ рдЪреАрдиреА рдпрд╛ рдЬрд░реНрдорди рдореЗрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдЖрдк рд╣рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЧрд┐рддреБрдм рдкрд░ рдПрдХ рд╕реНрдЯрд╛рд░ рджреЗрдирд╛ рд╣реИ рдпрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдлреЛрд░реНрдХ рдХрд░рдирд╛ рд╣реИ github / sidristij / dotnetbook ред

Source: https://habr.com/ru/post/hi439486/


All Articles