C # рдореЗрдВ рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдХрд▓реНрдкрдирд╛рдПрдБ

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

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

рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдХреНрдпрд╛ рд╣реИ?


рддреЛ рдПрдХ рдореЗрдЯрд╛рдХреНрд▓рд╕ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред C # рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╕рдорд╛рди рд╣реИ - рдЯрд╛рдЗрдк рдЯрд╛рдЗрдкред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕рдорд╛рдиред рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдорд╛рди рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдореЗрдЯрд╛рдХреНрд▓рд╕ рдХреЗрд╡рд▓ рд╡рд░реНрдЧ рдХреЗ рд╡рд╛рд░рд┐рд╕реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдореЗрдЯрд╛рдХреНрд▓рд╕ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, C рдХрд╛ рд╣рдорд╛рд░рд╛ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдЯрд╛рдЗрдк <T> рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЯрд╛рдЗрдк рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИред рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдк <рдЯреА> рдХреЗрд╡рд▓ рдЯрд╛рдЗрдк рдЯреА рдпрд╛ рдЙрд╕рдХреЗ рд╡рдВрд╢рдЬ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рдордЭрд╛рдКрдВрдЧрд╛:

class A { } class A2 : A { } class B { } static class Program { static void Main() { Type<A> ta; ta = typeof(A); //   ta = typeof(A2); //    ta = typeof(B); //   тАУ Type<B>   Type<A> ta = (Type<A>)typeof(B); //      -   Type tx = typeof(A); ta = tx; //   тАУ    Type  Type<A> ta = (Type<A>)tx; //    Type<B> tb = (Type<B>)tx; //  } } 

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

рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдФрд░ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп


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

 class X { public static void DoSomething() { } } static class Program { static void Main() { Type<X> tx = typeof(X); tx.DoSomething(); //   ,     X.DoSomething(); } } 

рдпрд╣рд╛рдВ, рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рддреЗ рд╣реБрдП, рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ - рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рджрд╕рд╡реАрдВ рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдирд╛рдо рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдирд╛рдо рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд╛рд░рд┐рд╕ рдЯрд╛рдЗрдк <X> рд╣реИ? рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ - рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреА рд╣рдорд╛рд░реА рдлрдВрддрд╛рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдИ рдЬрд╛рджреВ рдХреЗ рдирд╛рдо рдирд╣реАрдВ рд╣реИрдВред

рдХрд┐рд╕реА рднреА рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рднрдпрд╛рд╡рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЕрдЧрд░ рд╣рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рд╣рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рджрд░рдЕрд╕рд▓, рдЗрд╕ рд░реВрдк рдореЗрдВ, рдпрд╣ рдЕрд╡рд╕рд░ рдмреЗрдХрд╛рд░ рд╣реИред рд▓реЗрдХрд┐рди рдлрд╛рдпрджрд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЗрд╕рдореЗрдВ рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЗ


рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЗ рдПрдХ рдФрд░ рдирд┐рд░реНрдорд╛рдг рд╣реИ рдЬреЛ рдбреЗрд▓реНрдлреА рдХреЗ рдкрд╛рд╕ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реА # рдореЗрдВ рдЧрд╛рдпрдм рд╣реИред рдЬрдм рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╢рдмреНрдж рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдХреНрд░реЙрд╕ рд╣реЛрддрд╛ рд╣реИред рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЛрдВ рдХреА рддрд░рд╣, рд╡реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдП рдмрд┐рдирд╛ рд╡рд░реНрдЧ рдирд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдореЗрдЯрд╛рдХреНрд▓рд╕ рд╣реИ, рдЕрд░реНрдерд╛рддред рдпрджрд┐ рдХрдХреНрд╖рд╛ X рдореЗрдВ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЯрд╛рдЗрдк <X> рд╣реЛрдЧрд╛ред рдФрд░ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 class X { public class void Report() { Console.WriteLine($тАЭ    {this.Name}тАЭ); } } class Y : X { } static class Program { static void Main() { X.Report() // : ┬л    X┬╗ Y.Report() // : ┬л    Y┬╗ } } 

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

 class X { protected static virtual DoReport() { Console.WriteLine(тАЬ!тАЭ); } public static Report() { DoReport(); } } class Y : X { protected static override DoReport() { Consloe.WriteLine(тАЬ!тАЭ); } } static class Program { static void Main() { X.Report() // : ┬л!┬╗ Y.Report() // : ??? } } 

Y.Report рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЪреАрдЬреЛрдВ рдХреЗ рддрд░реНрдХ рд╕реЗ, "рдмрд╛рдп!" рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди X.Report рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕ рд╡рд░реНрдЧ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ X.DoReport рдФрд░ Y.DoReport рдХреЗ рдмреАрдЪ рдЪрдпрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдирддреАрдЬрддрди, X.Report рд╣рдореЗрд╢рд╛ X.DoReport рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рднрд▓реЗ рд╣реА рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ Y рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред DoReport рд╡рд┐рдзрд┐ рдХреЛ рдЖрднрд╛рд╕реА рдмрдирд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдордЭрджрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, C # рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЛ рдЖрднрд╛рд╕реА рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ - рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдЖрднрд╛рд╕реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдирдХреА рдЖрднрд╛рд╕реАрддрд╛ рд╕реЗ рд▓рд╛рдн рдирд╣реАрдВ рд▓реЗ рдкрд╛рдПрдВрдЧреЗред

рдПрдХ рдФрд░ рдмрд╛рдд рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред рдпрджрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рд╕ рдереА, рддреЛ рдпрд╣ "рдкрддрд╛" рд╣реЛрдЧрд╛ рдЬрдм рдЗрд╕реЗ рдПрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЬрдм рд╡рд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рддрджрдиреБрд╕рд╛рд░, рд╕рдВрдХрд▓рдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд DoReport рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛, рдФрд░ Y.Report рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдирд┐рд╖реНрдХрд░реНрд╖ "рдмрд╛рдп!"ред

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

 class X { public static virtual Report() { Console.WriteLine(тАЬ!тАЭ); } } class Y : X { public static override Report() { Consloe.WriteLine(тАЬ!тАЭ); } } static class Program { static void Main() { Type<X> tx = typeof(X); tx.Report() // : ┬л!┬╗ tx = typeof(Y); tx.Report() // : ┬л!┬╗ } } 

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

рд╡рд░реНрдЪреБрдЕрд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░


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

 class A { public virtual A(int x, int y) { ... } } class B : A { public override B(int x, int y) : base(x, y) { } } class C : A { public C(int z) { ... } } 

рдЗрд╕ рдХреЛрдб рдореЗрдВ, рдХреНрд▓рд╛рд╕ C рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ int x, int y, рд▓реЗрдХрд┐рди class B рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рд╣реИред

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

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

 class A { public virtual A(int x, int y) { ... } } class B : A { public override B(int x, int y) : base(x, y) { } } static class Program { static void Main() { Type<A> ta = typeof(A); A a1 = ta.CreateInstance(10, 12); //    A ta = typeof(B); A a2 = ta.CreateInstance(2, 7); //    B } } 

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

рдирд┐рд╖реНрдХрд░реНрд╖


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

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


All Articles