рдЖрдВрд╢рд┐рдХ рдмрдирд╛рдо рдЙрдкрдпреЛрдЧ рдХрд░реА


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


рдпрд╣ рдПрдХ рд╡рд┐рдЪрд┐рддреНрд░ рдкреЛрд╕реНрдЯ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдЦреБрдж рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:


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


рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рд╛рд╕реНрдХреЗрд▓ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред


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

рд╕реА # рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ - рдореБрдЭреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗ рд╡рд░реНрдгрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред

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

static string SampleFunction(int a, int b, int c) { return string.Format("a={0}; b={1}; c={2}", a, b, c); } 

рдЕрдм рддрдХ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдХреБрдЫ рднреА рдЪрд╛рд▓рд╛рдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╕рдм рдХреНрдпрд╛ рд╣реИ?


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

 Func<int, int, int, string> function = SampleFunction; 

рдпрд╣ рд░реЗрдЦрд╛ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ:


рдЕрдм рд╣рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рддреАрди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 string result = function(1, 2, 3); 

рдпрд╛ рдПрдХ рд╣реА рдмрд╛рдд:

 string result = function.Invoke(1, 2, 3); 

(C # рд╕рдВрдХрд▓рдХ рдкрд╣рд▓реЗ рд▓рдШреБ рд░реВрдк рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрддреНрдкрдиреНрди IL рд╕рдорд╛рди рд╣реЛрдЧрд╛ред)

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


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

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

рдЖрдВрд╢рд┐рдХ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


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

 //   string result1 = function(1, 2, 3); //     Func<int, int, string> partialFunction = ApplyPartial(function, 1); string result2 = partialFunction(2, 3); 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдПрдХрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ - рдЖрдк ApplyPartial рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ , рдЬреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХ рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрддрд┐рдо рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдиреНрдп рдкрджреЛрдВ рдкрд░ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░ рджреЗрдЧрд╛ред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛, рд╢реБрд░реБрдЖрдд рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛, рд╕рдмрд╕реЗ рдЖрдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред

рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, рд▓реЗрдХрд┐рди рдЕрдирд╛рдо рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА), ApplyPartial рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рд╣реИ:

 static Func<T2, T3, TResult> ApplyPartial<T1, T2, T3, TResult> (Func<T1, T2, T3, TResult> function, T1 arg1) { return (b, c) => function(arg1, b, c); } 

рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓рдЧрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ C # рдореЗрдВ рдЙрдЪреНрдЪ рдЖрджреЗрд╢ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдпрджрд┐ рдЖрдкрдХреЛ рдЪрд╛рд░ рдорд╛рдкрджрдВрдбреЛрдВ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ ApplyPartial <T1, T2 рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ , T3, T4, TResult> рдЖрджрд┐ред рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдПрдХреНрд╢рди рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рднреА рдЪрд╛рд╣рд┐рдПред

рдзреНрдпрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реА рдЕрдВрддрд┐рдо рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рд╕рднреА рддрд░реАрдХреЛрдВ рд╕реЗ, рд╣рдо рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рдлрд┐рд░ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдкрд░рд┐рдгрд╛рдореА рдлрд╝рдВрдХреНрд╢рди рддрдХ, рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

 Func<int, int, string> partial1 = ApplyPartial(function, 1); Func<int, string> partial2 = ApplyPartial(partial1, 2); Func<string> partial3 = ApplyPartial(partial2, 3); string result = partial3(); 

рдлрд┐рд░, рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧреАред

рдареАрдХ рд╣реИ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдХрд░реАрдирд╛ рдХреЛ рд╕рдордЭрдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИред

currying


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


(рдлрд┐рд░ рд╕реЗ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддреАрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ - рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдЕрдиреНрдп рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред)

рд╣рдорд╛рд░реЗ "рд╕рдордХрдХреНрд╖" рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 //   string result1 = function(1, 2, 3); //    Func<int, Func<int, Func<int, string>>> f1 = Curry(function); Func<int, Func<int, string>> f2 = f1(1); Func<int, string> f3 = f2(2); string result2 = f3(3); //     ... var curried = Curry(function); string result3 = curried(1)(2)(3); 

рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдЗрд╕ рдХрд╛рд░рдг рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдФрдЪрд┐рддреНрдп рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛрддрд╛ рд╣реИ: рдШреЛрд╖рдгрд╛ рдПрдл 1 рдмрд╣реБрдд рдбрд░рд╛рд╡рдирд╛ рд╣реИред

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

 static Func<T1, Func<T2, Func<T3, TResult>>> Curry<T1, T2, T3, TResult> (Func<T1, T2, T3, TResult> function) { return a => b => c => function(a, b, c); } 

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

рдпрд╣ рдХрд░реА рд╣реИред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ред

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


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

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

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

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


All Articles