рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд┐рд╡рд┐рдзрддрд╛

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


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


рдмреНрд░реАрдлрд┐рдВрдЧ


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


рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рдЯреЛрдЯрдХреЗ


рдкреНрд░рд▓реЗрдЦрди, рддрдХрдиреАрдХреА рд╕рд╛рд╣рд┐рддреНрдп рдФрд░ рдЕрдиреНрдп рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдореЛрдВ рд╕реЗ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдИ рдЬреНрдпрд╛рджрд╛ рдбрд░рд╛ рдФрд░ рд╕рд╣рдорд╛ рд╣реБрдЖред


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


рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рд╕рд╣рд╕рдВрдпреЛрдЬрдХ рдФрд░ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реАред


рд╕рд┐рджреНрдзрд╛рдВрдд


рд╡реЗрд░рд┐рдПрдВрдЯ - рд╕реНрд░реЛрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдорддрд▓рдм рдХрдВрдЯреЗрдирд░реЛрдВ, рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ, рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдгреЛрдВ рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдкреВрд░реНрд╡рдЬ-рдмрд╛рд▓ рд╕рдВрдмрдВрдзреЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рднрд┐рдиреНрдирддрд╛ рдХреЛрд╡рд┐рд░рд┐рдпрд╕, рдХрдВрдЯреНрд░реЛрд╡рд░реНрд╕реА рдФрд░ рдЗрдирд╡рд┐рд░реЗрдиреНрд╕ рд╣реИрдВред


рдХреЛрд╡рд░рд┐рдпрдирд╕ - рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реНрд░реЛрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред
рд╡рд┐рдкрд░реАрддрд╛рд░реНрдердХ - рд╕реНрд░реЛрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рдЙрд▓реНрдЯреЗ рдХреНрд░рдо рдореЗрдВ рдЙрдирд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред
Invariance рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд╣рд╛рдВ рдореВрд▓ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


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


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


рдЕрднреНрдпрд╛рд╕


рдпрд╣ рд╕рдм рдХрд┐рд╕ рд▓рд┐рдП рд╣реИ?

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


рд╕реНрд░реЛрдд рдкрджрд╛рдиреБрдХреНрд░рдо рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Device (рдбрд┐рд╡рд╛рдЗрд╕) рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╡рдВрд╢рдЬ Mouse (рдорд╛рдЙрд╕), Keyboard (рдХреАрдмреЛрд░реНрдб) рд╣реИрдВред Mouse рдмрджрд▓реЗ рдореЗрдВ, рд╡рдВрд╢рдЬ рднреА рд╣реИрдВ - WiredMouse (рд╡рд╛рдпрд░реНрдб рдорд╛рдЙрд╕), WiredMouse (рд╡рд╛рдпрд░рд▓реЗрд╕ рдорд╛рдЙрд╕)ред



рд╕рднреА рдХреЛ рдХрдВрдЯреЗрдирд░ рдкрд╕рдВрдж рд╣реИрдВред рдЙрдирдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдпрджрд┐ рд╣рдо рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Device рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реЛрдЧрд╛
List<Device> (рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА)ред рдЗрд╕реА рдкреНрд░рдХрд╛рд░, Keyboard рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП, List<Keyboard> рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╕рдВрджреЗрд╣ рдереЗ, рдЕрдм рд╡реЗ рдЪрд▓реЗ рдЧрдП рд╣реИрдВред


рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рд╣рд╕рдВрдпреЛрдЬрдХ

рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣рд╕рдВрдпреЛрдЬрдХ рд╕реАрдЦрдирд╛ рднреА рдЖрд╕рд╛рди рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрджрд╛рдиреБрдХреНрд░рдо (рд╢рд╛рдЦрд╛) рдХреЗ рдПрдХ рднрд╛рдЧ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ - Keyboard : Device (рдХреАрдмреЛрд░реНрдб рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдХреАрдмреЛрд░реНрдб рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ)ред рдлрд┐рд░ рд╕реЗ, рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд▓реЗрдВ рдФрд░ рд╕рд╣рд╕рдВрдпреЛрдЬрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╢рд╛рдЦрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ - List<Keyboard> : List<Device> (рдХреАрдмреЛрд░реНрдб рдХреА рд╕реВрдЪреА рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ)ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рд╕реАрдзреЗ рдХреНрд░рдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рдПрдХ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреА List<Device> рд▓реЗрддрд╛ рд╣реИ List<Device> рдФрд░ рдЙрди рдкрд░ рдХреБрдЫ рд╣реЗрд░рдлреЗрд░ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдХреАрдмреЛрд░реНрдб List<Keyboard> рдХреА рд╕реВрдЪреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 void DoSmthWithDevices(List<Device> devices) { /*     */ } ... List<Keyboard> keyboards = new List<Keyboard> { /*   */ }; DoSmthWithDevices(keyboards); 

рд╢рд╛рд╕реНрддреНрд░реАрдп рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА

рдХрдВрдЯреНрд░реЛрд╡рд░реНрд╕реА рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╣рд┐рдд рдЗрд╕рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИ:


 delegate void Action<T>(T something); 

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



рдкреВрд░реНрд╡рдЧрд╛рдореА рд╕реЗ, рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдХреАрдмреЛрд░реНрдб рдкрд░ рднреА рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдПрдХ Action<Device> рдбреЗрд▓реАрдЧреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ Action<Keyboard> рдбреЗрд▓реАрдЧреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


 void DoSmthWithKeyboard(Action<Keyboard> actionWithKeyboard) { /*  actionWithKeyboard   */ } ... Action<Device> actionWithDevice = device => device.PlugIn(); DoSmthWithKeyboard(actionWithDevice); 

рдЬрд░рд╛-рд╕реА рдЕрд╕рд╛рд╡рдзрд╛рдиреА

рдпрджрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░ рдореВрд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ, рддреЛ Keyboard : Device рд╢рд╛рдЦрд╛ рди рддреЛ рд╕рд╣рд╕рдВрдпреЛрдЬрдХ ( List<Keyboard> : List<Device> ) рдФрд░ рди рд╣реА рдПрдХ contravariant ( Action<Device> : Action<Keyboard> ) рд╢рд╛рдЦрд╛ рдмрдирддреА рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░?


рдЕрд╕рднреНрдп рд╕рд╣рд╕рдВрдпреЛрдЬрдХ

рдЯрд╛рдЗрдк Action<T> рдкреНрд░рддрд┐рдирд┐рдзрд┐ Action<T> рд╕рд╣рд╕рдВрдпреЛрдЬрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ Keyboard : Device рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╣рд╕рдВрдпреЛрдЬрдХ рд╢рд╛рдЦрд╛ рдмрдирддреА рд╣реИ - Action<Keyboard> : Action<Device> ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ Action<Keyboard> рдбреЗрд▓реАрдЧреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдлрдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ Action<Device> рдбреЗрд▓реАрдЧреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред


 void DoSmthWithDevice(Action<Device> actionWithDevice) { /*  actionWithDevice   */ } ... Action<Keyboard> actionWithKeyboard = keyboard => ((Device)keyboard).PlugIn(); DoSmthWithDevice(actionWithKeyboard); 

рдЕрд╕рднреНрдп рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА

рдХрдВрдЯреЗрдирд░ рдХрдВрдЯреНрд░рд╛рд╡реЗрд░реЗрдВрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Keyboard : Device рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрдВрдЯреНрд░рд╛рд╡реЗрд░реЗрдВрдЯ рд╢рд╛рдЦрд╛ рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - List<Device> : List<Keyboard> ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ List<Keyboard> рдореЗрдВ, рдЬреЛ рдХрд┐ рдПрдХ List<Keyboard> рд▓реЗрддрд╛ рд╣реИ, рдЖрдк рдПрдХ List<Device> рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 void FillListWithKeyboards(List<Keyboard> keyboards) { /*    */ } ... List<Devices> devices = new List<Devices>(); FillListWithKeyboards(devices); 

рдкрд╡рд┐рддреНрд░ рдЕрд░реНрде

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


рдХрдВрдЯреЗрдирд░ рд╕реБрд░рдХреНрд╖рд╛

рдпрджрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░ рд╕рд╣рд╕рдВрдпреЛрдЬрдХ рд╣реИ, рддреЛ рдХрдВрдЯреЗрдирд░ рдХреЛ рдХреЗрд╡рд▓ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, List<Keyboard> рдХреЛ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ List<Keyboard> рдореЗрдВ рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ ( Device , Mouse рдФрд░ рдЕрдиреНрдп) рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред


 List<Device> devices = new List<Keyboard>(); devices.Add(new Device()); //    

рдпрджрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЙрдиреНрдЯреНрд░реИрд╡рд┐рдпрд░ рд╣реИ, рддреЛ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдХреЗрд╡рд▓ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, List<Device> рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реВрдЪреА ( List<Keyboard> , List<Mouse> рдФрд░ рдЕрдиреНрдп) рдкрд░ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдХреЗ рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ ( Keyboard , Mouse рдФрд░ рдЕрдиреНрдп) рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдкрдврд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИред


 List<Keyboard> keyboards = new List<Device>(); keyboards.Add(new Keyboard()); keyboards[0].PressSpace(); //    

рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛрд╣рд░рд╛ рдорд╛рдкрджрдВрдб

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


рдбреАрдмреНрд░реАрдлрд┐рдВрдЧ


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


рдпреВрдбреАрдкреА


рд╢рд╛рдпрдж рднрд┐рдиреНрдирддрд╛ рдХреА рдЕрдзрд┐рдХ рд╕рд╣реА рдкрд░рд┐рднрд╛рд╖рд╛ рдПрд░рд┐рдХ рд▓рд┐рдкрд░реНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИред рд▓реЗрдЦ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП Alex_sik рдХреЛ рдзрдиреНрдпрд╡рд╛рджред


рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕рдВрдЧрддрддрд╛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЧрдд рдЪрд░ рдореЗрдВ рдЕрдзрд┐рдХ рдирд┐рдЬреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред
рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рд╕рдВрдЧрддрддрд╛ рдХрд╛ рд╕рдВрд░рдХреНрд╖рдг рд╣реИред
рдХреЛрд╡рд░рд┐рдпрдирд╕ рдкреНрд░рддреНрдпрдХреНрд╖ рдХреНрд░рдо рдореЗрдВ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдореЗрдВ рд╕реНрд░реЛрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рд╕рдВрдЧрддрддрд╛ рдХрд╛ рд╕рдВрд░рдХреНрд╖рдг рд╣реИред
рд╡рд┐рдкрд░реАрдд рдХреНрд░рдо рдореЗрдВ рд╡реНрдпреБрддреНрдкрдиреНрди рдореЗрдВ рдореВрд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рд╕рдВрдЧрддрддрд╛ рдХрд╛ рд╕рдВрд░рдХреНрд╖рдг рд╣реИред



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


All Articles