рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдареНрдпрдХреНрд░рдо "C # рдбреЗрд╡рд▓рдкрд░" рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред

C # рдореЗрдВ рдХреМрди рд╕реА рдШрдЯрдирд╛рдПрдБ рд╣реИрдВ?
рдПрдХ рдШрдЯрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реВрдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЗрди рд╕реВрдЪрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдИрд╡реЗрдВрдЯ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧреА рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХреБрдЫ рд╣рд┐рддред .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдЗрд╡реЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбреЗрд▓рд┐рдЧреЗрдЯреНрд╕, рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдФрд░ рдЕрдирд╛рдо рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдИрд╡реЗрдВрдЯ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
C # рдореЗрдВ рдбреЗрд▓рд┐рдЧреЗрдЯреНрд╕ рдХреЛ рд╕рдордЭрдирд╛
C # рдореЗрдВ, рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C ++ рдореЗрдВ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред C # рдореЗрдВ, рдЖрдк рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
C # рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
}class Program { public delegate double MathDelegate(double value1, double value2); public static double Add(double value1, double value2) { return value1 + value2; } public static double Subtract(double value1, double value2) { return value1 - value2; } Console.ReadLine(); public static void Main() { MathDelegate mathDelegate = Add; var result = mathDelegate(5, 2); Console.WriteLine(result);
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЙрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд▓рд┐рдЧреЗрдЯ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдПрдХ рдбреЗрд▓рд┐рдЧреЗрдЯ рдЯрд╛рдЗрдк рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
рдПрдХ рдирдП рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрд╡рдд: рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЛ рддреНрд╡рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдЖрдк рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рдирдП рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
MathDelegate mathDelegate = new MathDelegate(Add)
;
рдПрдХ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ; рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдорд▓реНрдЯрд┐рдХрд╛рд╕реНрдЯ рдбреЗрд▓рд┐рдЧреЗрдЯреНрд╕ C # рдореЗрдВ
рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рдФрд░ рдмрдбрд╝реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореМрдЬреВрджрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЙрджрд╛рд╣рд░рдг рдХреА рдХреЙрд▓ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк + рдпрд╛ + = рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, рдЖрдк рдбреАрдЯреЗрд▓ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ (- рдпрд╛ - =) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рд╕реВрдЪреА рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рднреА рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ C # рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
class Program { static void Hello(string s) { Console.WriteLine(" Hello, {0}!", s); } static void Goodbye(string s) { Console.WriteLine(" Goodbye, {0}!", s); } delegate void Del(string s); static void Main() { Del a, b, c, d;
рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐
System.MulticastDelegate
рд╡рд░реНрдЧ рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ
System.Delegate
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдЖрдк рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрди рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд┐рддрдиреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
int invocationCount = d.GetInvocationList().GetLength(0);
C # рдореЗрдВ Covariance рдФрд░ contravariance
рдЬрдм рдЖрдк рдХрд┐рд╕реА рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рд╕реМрдВрдкрддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдХреЛрд╡рд░рд┐рдпрдирд╕ рдФрд░ рдХрдВрдЯреНрд░реЛрд╡рд░реНрд╕реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред Covariance рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Contravariance рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдХрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИрдВред
рдбреЗрд▓рд┐рдЧреЗрдЯ рдХреЛрд╡рд┐рд░рд┐рдпрди
рдпрд╣рд╛рдБ рд╕рд╣рднреЛрдЬ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ,
class Program { public delegate TextWriter CovarianceDel(); public static StreamWriter MethodStream() { return null; } public static StringWriter MethodString() { return null; } static void Main() { CovarianceDel del; del = MethodStream; del = MethodString; Console.ReadLine(); } }
рдЪреВрдВрдХрд┐
StreamWriter
рдФрд░
StringWriter
рджреЛрдиреЛрдВ
TextWriter
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВ, рдЖрдк
CovarianceDel
рдЙрдкрдпреЛрдЧ рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдВрдЯреНрд░реЛрд╡рд░реНрд╕реА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
class Program { public static void DoSomething(TextWriter textWriter) { } public delegate void ContravarianceDel(StreamWriter streamWriter); static void Main() { ContravarianceDel del = DoSomething; Console.ReadLine(); } }
рдЪреВрдВрдХрд┐
DoSomething
рд╡рд┐рдзрд┐
TextWriter
рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ
StreamWriter
рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИред рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЖрдк рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
StreamWriter
рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
DoSomething
рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк
рдпрд╣рд╛рдВ рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
C # рдореЗрдВ рд▓реИрдореНрдмрдбрд╛ рдХреЗ рднрд╛рд╡
рдХрднреА-рдХрднреА рдПрдХ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╕реНрд╡рдпрдВ рд╡рд┐рдзрд┐ рдХреЗ рд╢рд░реАрд░ рд╕реЗ рдЕрдзрд┐рдХ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рднреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, Microsoft рдиреЗ C # рдореЗрдВ рдХреБрдЫ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝реА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ 2.0 рдореЗрдВ рдЕрдирд╛рдо рд╡рд┐рдзрд┐рдпрд╛рдБред C # 3.0 рдореЗрдВ, рд▓реИрдореНрдмрдбрд╛ рдХреЗ рднрд╛рд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдЪреАрдЬреЗрдВ рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реЛ рдЧрдИрдВред рдирдпрд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд╕рдВрджреАрджрд╛ рддрд░реАрдХрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд╡реАрдирддрдо рд▓реИрдореНрдмреНрдбрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
class Program { public delegate double MathDelegate(double value1, double value2); public static void Main() { MathDelegate mathDelegate = (x,y) => x + y; var result = mathDelegate(5, 2); Console.WriteLine(result); // : 7 mathDelegate = (x, y) => x - y; ; result = mathDelegate(5, 2); Console.WriteLine(result); // : 3 Console.ReadLine(); } }
рдЗрд╕ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд▓рдВрдмреЛрджрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ "рдЕрдиреБрд╕рд░рдг" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд╣рд▓рд╛ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ" рдкрдврд╝рддрд╛ рд╣реИред
рдПрдХ рдореЗрдореНрдмрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдо рдирд╣реАрдВ рд╣реИ, рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╡рд┐рдкрд░реАрддред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд▓рдВрдмрджрд╛ рдХреЛ рдЧреБрдордирд╛рдо рдХрд╛рд░реНрдп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рдВрдмреЛрджрд░ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдирддрд╛ рд╣реИред рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ x рдФрд░ y рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВред
рдЖрдк рдХрдИ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдлреИрд▓рд╛рддреЗ рд╣реБрдП рд▓реИрдореНрдмреНрдбрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рд▓реИрдВрдмрдбрд╛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрдпрд╛рдиреЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдЬреЛрдбрд╝рдХрд░ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
MathDelegate mathDelegate = (x,y) => { Console.WriteLine("Add"); return x + y; };
рдХрднреА-рдХрднреА рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдереЛрдбрд╝реА рдмреЛрдЭрд┐рд▓ рд▓рдЧрддреА рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдХрдИ рдмрд┐рд▓реНрдЯ-рдЗрди рдбреЗрд▓рд┐рдЧреЗрдЯ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдбреЗрд▓рд┐рдЧреЗрдЯреНрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред MathDelegate рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдкрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:
public delegate double MathDelegate(double value1, double value2);
рдЖрдк рдЗрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдмрд┐рд▓реНрдЯ-рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ
Func <int, int, int>
ред
рдЙрд╕ рддрд░рд╣
class Program { public static void Main() { Func<int, int, int> mathDelegate = (x,y) => { Console.WriteLine("Add"); return x + y; }; var result = mathDelegate(5, 2); Console.WriteLine(result);
рдлрдВрдХ <...> рдкреНрд░рдХрд╛рд░ рд╕рд┐рд╕реНрдЯрдо рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░рд┐рдЯрд░реНрди рджреЗрддреЗ рд╣реИрдВ рдФрд░ 0 рд╕реЗ 16 рдорд╛рдкрджрдВрдбреЛрдВ рддрдХ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ System.MulticaseDelegate рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдХреЙрд▓ рд╕реВрдЪреА рдореЗрдВ рдХрдИ рддрд░реАрдХреЗ рдЬреЛрдбрд╝ рд╕рдХреЗрдВред
рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдорд╛рди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк System.Action рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ 0 рд╕реЗ 16 рдорд╛рдкрджрдВрдбреЛрдВ рддрдХ рднреА рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рдПрдХреНрд╢рди рдЯрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ,
class Program { public static void Main() { Action<int, int> mathDelegate = (x,y) => { Console.WriteLine(x + y); }; mathDelegate(5, 2);
рдЖрдк .NET рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рдЪреАрдЬреЗрдВ рддрдм рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ рдЬрдм рдЖрдкрдХрд╛ рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд╛рд╣рд░ рдШреЛрд╖рд┐рдд рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдЬрдм рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдХрд┐рд╕реА рдЪрд░ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЪрд░ рдЕрдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдХрд▓рдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдЪрд░ рдХреЗ рдЬреАрд╡рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЬрдм рддрдХ рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЬреАрд╡рди рдЬреАрддрд╛ рд╣реИред рдЗрд╕реЗ рдХреНрд▓реЛрдЬрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдк
рдпрд╣рд╛рдВ рдХреНрд▓реЛрдЬрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
C # рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо
рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдкреИрдЯрд░реНрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рдкреНрд░рдХрд╛рд╢рдХ-рдЧреНрд░рд╛рд╣рдХ (рдкрдм / рдЙрдк)ред рдЖрдк рдХрд┐рд╕реА рдИрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рддрдм рдЖрдкрдХреЛ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдИрд╡реЗрдВрдЯ рдкреНрд░рдХрд╛рд╢рдХ рдПрдХ рдирдпрд╛ рдИрд╡реЗрдВрдЯ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдХрдордЬреЛрд░ рд╕рдВрдЪрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рддрд┐рдирд┐рдзрд┐ # C рдореЗрдВ рдЗрд╡реЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИред
рдИрд╡реЗрдВрдЯ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдИрд╡реЗрдВрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИред рдЗрд╡реЗрдВрдЯ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рд╕реНрдкреЗрд╕рд┐рдпрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрд▓рд╛рд╕ рдХреЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдШрдЯрдирд╛ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП + = рдФрд░ - = рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реЗрдЧреА, рд▓реЗрдХрд┐рди рдПрдХ рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ (рдпрд╛рдиреА, рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛) рдХреЗрд╡рд▓ рдЙрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ,
рдлрд┐рд░, рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬреЛрдбрд╝рдХрд░ рдШрдЯрдирд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреА рд╣реИ:
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╡рд░реНрдЧ рдПрдХ рдЦреБрд▓рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдШрдЯрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред
class Program { static void Main(string[] args) {
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдШрдЯрдирд╛ рдХреЛ
public
рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд╣реАрдВ рднреА рд╕реАрдзреЗ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рд╕реНрдерд┐рдд рд╣реИред
event
рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рдорд╛рд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЕрд╡рд╛рдВрдЫрд┐рдд рдкрд╣реБрдВрдЪ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред
рдФрд░ рднреА
рдпрд╣ = (рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ) рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдм рдЖрдкрдХрд╛ рдХреЛрдб + = рдХреЗ рдмрдЬрд╛рдп = рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд┐рдЫрд▓реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдЬреЛрдЦрд┐рдо рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдПрдХ рдЦрд╛рд▓реА рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ OnChange рдлрд╝реАрд▓реНрдб рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ
delegate { }
ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ OnChange рдХреНрд╖реЗрддреНрд░ рдХрднреА рднреА рдЕрд╢рдХреНрдд рди рд╣реЛред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдШрдЯрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рд╡рд░реНрдЧ рд╕рджрд╕реНрдп рдЗрд╕реЗ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЬрдм рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рдХреЛрдб рдкрдм рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЗрд╕ рдШрдЯрдирд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ p.Raise рдХреЙрд▓ рдХрд░рдХреЗ рдПрдХ рдШрдЯрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдкрдм рд╡рд░реНрдЧ рдХрд┐рд╕реА рднреА рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирдЬрд╛рди рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдШрдЯрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рдЧрд╣рди рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдЖрдк рдореЗрд░рд╛ рд▓реЗрдЦ,
C # рдкреНрд░рдХрд╛рд╢рдХ-рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рднреА рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЦреИрд░, рдпрд╣ рд╕рдм рдЕрднреА рдХреЗ рд▓рд┐рдП рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдорд┐рд▓реЗрдЧрд╛ред рдкреЛрд╕реНрдЯ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ рдпрд╛ рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рдж!
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ
www.c-sharpcorner.com/blogs/c-sharp-generic-delegates-func-action-and-predicatedocs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/covariance-contravariancehttps://web.archive.org/web/20150707082707/http://diditwith.net/PermaLink,guid,235646ae-3476-4893-899d-105e4d48c25b.aspx