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

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



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


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

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

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


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

рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛


рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╕реНрдЯреИрдХ рдФрд░ рдвреЗрд░ рдкрд░ рдореЗрдореЛрд░реА рдХрд╛ рдкреГрдердХреНрдХрд░рдг .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..."); } } 


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



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

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

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

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

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

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



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

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

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


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

рдпрд╣рд╛рдБ рдХреЛрдб
 //     public class PointerCasterFacade { public virtual unsafe T GetManagedReferenceByPointer<T>(int* pointer) => default(T); public virtual unsafe int* GetPointerByManagedReference<T>(T managedReference) => (int*)0; } //     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/hi428676/


All Articles