рд╕реА # рдХреА рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЛрдВ рдХреЛ рддреЛрдбрд╝рдХрд░: рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛

рдпрд╣ рдЖрд▓реЗрдЦ рдЖрдкрдХреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рджрд┐рдЦрд╛рдПрдЧрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рдПрдЧреА (рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рдкреВрд░реНрдг-рд╕реНрдЯреИрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реВрдВ)ред



рддреНрдпрд╛рдЧ


рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдРрд╕реА рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХреЗрд╡рд▓ рд╕реАрдорд╛рдУрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрд╣рд╛рдиреА рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░рдХреНрдЪреНрдпреБрд▓реЗрдЯрдЖрдЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ , рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣)ред

рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕


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

рдереЛрдбрд╝реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯрд░реНрдирд▓реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рдкреБрд░рд╛рдиреЗ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП, рдЕрдм рдХреБрдЫ рдСрдлрд╕реЗрдЯ рдмрджрд▓ рджрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рд╕реНрдХреАрдорд╛ рд╕рдорд╛рди рд╣реИ)


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

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

рдЗрд╕рд▓рд┐рдП, рдХрд░реНрдордЪрд╛рд░реА рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдХреЛрдб рдХрд░реНрдордЪрд╛рд░реА
public class Employee { private int _id; private string _name; public virtual void Work() { Console.WriteLine(тАЬZzzz...тАЭ); } public void TakeVacation(int days) { Console.WriteLine(тАЬZzzz...тАЭ); } public static void SetCompanyPolicy(CompanyPolicy policy) { Console.WriteLine("Zzzz..."); } } 


рдФрд░ рдЗрд╕реЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред
рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред



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

рдкрд╣рд▓рд╛ рдХреНрд╖реЗрддреНрд░ (рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдмреНрд▓реЙрдХ рдЗрдВрдбреЗрдХреНрд╕) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реА рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╕рдордп рдореИрдВрдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдРрд╕рд╛ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ:

  1. рдореИрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реВрдВ (рдореИрдВрдиреЗ рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ рдХрд╛рд░рдг рд╡рд╛рдЬрд┐рдм рд╣реЛрдВрдЧреЗ)
  2. рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдореВрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

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

рддрдм рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред



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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджрд░реНрдн рдХреЗрд╡рд▓ рддрд╛рд▓рд┐рдХрд╛ рддрд╛рд▓рд┐рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдЙрджрд╛рд╣рд░рдг


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

рдореИрдкрд░ рдХрд╛ рдХреЛрдб
 // Provides the signatures we need public class PointerCasterFacade { public virtual unsafe T GetManagedReferenceByPointer<T>(int* pointer) => default(T); public virtual unsafe int* GetPointerByManagedReference<T>(T managedReference) => (int*)0; } // Provides the logic we need public class PointerCasterUnderground { public virtual T GetManagedReferenceByPointer<T>(T reference) => reference; public virtual unsafe int* GetPointerByManagedReference<T>(int* pointer) => pointer; } [StructLayout(LayoutKind.Explicit)] public class PointerCaster { public PointerCaster() { pointerCaster= new PointerCasterUnderground(); } [FieldOffset(0)] private PointerCasterUnderground pointerCaster; [FieldOffset(0)] public PointerCasterFacade Caster; } 



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдореЗрдореЛрд░реА рдореЗрдВ рдкреЙрдЗрдВрдЯрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ (рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╕реНрдЯреИрдХ рдкрд░, рд╡реИрд╕реЗ) рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред

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

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

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

рдпрд╣ рдХреЗрд╡рд▓ рд╕реВрдЪрдХ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЕрд▓реНрдЯреНрд░рд╛-рдореЗрдЧрд╛ рдХреЙрд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред
 public class StackInitializer { public static unsafe T InitializeOnStack<T>(int* pointer) where T : new() { T r = new T(); var caster = new PointerCaster().Caster; int* ptr = caster.GetPointerByManagedReference(r); pointer[0] = ptr[0]; T reference = caster.GetManagedReferenceByPointer<T>(pointer); return reference; } } 

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

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

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

рдлрд┐рд░, рд╡рд░реНрддрдорд╛рди рд╕реНрдЯреИрдХ рдкрд░ рдореЗрдореЛрд░реА рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЙрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИред рдмрд╕ рдЗрддрдирд╛ рд╣реА рд╕реБрдирд╛ - рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛ред

 unsafe class Program { public static void Main() { int* pointer = stackalloc int[2]; var a = StackInitializer.InitializeOnStack<StackReferenceType>(pointer); a.StubMethod(); Console.WriteLine(a.Field); Console.WriteLine(a); Console.Read(); } } 

рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕реНрдЯреИрдХ рдкрд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдирдП рдЯреА () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдвреЗрд░ рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ! рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ 40-50 рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордп рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд░реНрдорд╛рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдХреНрд░реЙрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдирд╣реАрдВ рд╣реИред

рдпрд╣рд╛рдВ рдЖрдк рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реНрд░реЛрдд: рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдореЗрдВ, рд╕рд╛рд╢рд╛ рдЧреЛрд▓реНрдбрд╕реНрдЯреАрди - рдкреНрд░реЛ .NET рдкреНрд░рджрд░реНрд╢рди рдкреБрд╕реНрддрдХ рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

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


All Articles