рдЧреНрд░реЛрдХреЗ рдбреАрдПрд▓рдЖрд░

рдЕрдиреБрд╡рд╛рджрдХ рдХреА рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛

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

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

рдзреАрд░реЗ рдХрд░реЛред рдЬрдмрдХрд┐ DLR рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдкрд╛рдпрдерди рдФрд░ рд░реВрдмреА рдХреЗ рдЖрдпрд░рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдмрд╣реБрдд рдЧрд╣рд░реЗ рдЕрдореВрд░реНрддрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред



рд╣реБрдб рдХреЗ рддрд╣рдд, рдбреАрдПрд▓рдЖрд░ рдЕрдВрддрд░-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЪрд╛рд░ [рдЗрдВрдЯрд░-рдкреНрд░реЛрд╕реЗрд╕ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рди (рдЖрдИрдкреАрд╕реА)] рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдПрдХ рд╕рдореГрджреНрдз рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд░реНрд╖реЛрдВ рд╕реЗ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдХрдИ Microsoft рдЙрдкрдХрд░рдг рджреЗрдЦреЗ рд╣реИрдВ: DDE, DCOM, ActiveX, .net Remoting, WCF, ODataред рдпрд╣ рд╕реВрдЪреА рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓ рд╕рдХрддреА рд╣реИред рдпрд╣ рд╕рдорд░реВрдкреЛрдВ рдХреА рд▓рдЧрднрдЧ рдЕрдВрддрд╣реАрди рдкрд░реЗрдб рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдРрд╕реА рддрдХрдиреАрдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ рдЬреЛ рдпрд╣ рд╡рд╛рджрд╛ рдХрд░рддреА рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд░реНрд╖ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдпрд╛ рджреВрд░рд╕реНрде рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рднрд╛рд╖рд╛рдУрдВ рдХреА рднрд╛рд╖рд╛


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

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



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

DynamicMetaObject


рдбреАрдПрд▓рдЖрд░ рдХреИрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП DLR рдХреЗ рдХреЗрдВрджреНрд░реАрдп рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреЗрдЦреЗрдВ: DynamicMetaObject ред рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░рд╣ рдкреНрд░рдореБрдЦ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рддреАрди рдХреА рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

  1. BindCreateInstance - рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ рдпрд╛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ
  2. BindInvokeMember - рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
  3. BindInvoke - рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди (рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ)

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

рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рд╕рдорд╛рди рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, COM рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ CoCreateInstance рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред .NET рд░реАрдореЛрдЯрд┐рдВрдЧ рдореЗрдВ, рдЖрдк System.Activator рд╡рд░реНрдЧ рд╕реЗ CreateInstance рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред DLR DynamicMetaObject рд╕рдорд╛рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ BindCreateInstance рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

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

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

delegate void IntWriter(int n); void Main() { dynamic Write = new IntWriter(Console.WriteLine); Write(5); } 

рдпрд╣ рдХреЛрдб рдирдВрдмрд░ 5 рдХреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рдбреЗрд╡рд▓рдкрд░ рдХрднреА рднреА рдЗрддрдирд╛ рдмреЗрдХрд╛рд░ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХреЛрдб рдбрд╛рдпрдирд╛рдорд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдорд╛рди рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░рдХрд╛рд░ ID DynamicsicMetaObjectProvider рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдСрдкрд░реЗрд╢рди рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдореЗрдВ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП DynamicMetaObject рд╕реЗ BindInvoke рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рдХ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рд▓рд┐рдЦреЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдПрдХ рдФрд░ рдЯреБрдХрдбрд╝рд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрдм рдХрдВрдкрд╛рдЗрд▓рд░ BindInvokeMember рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ :

 class Writer : IDynamicMetaObjectProvider { public void Write(int n) { Console.WriteLine(n); } //    } void Main() { dynamic Writer = new Writer(); Writer.Write(7); } 

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

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

рдбрд╛рдпрдиреЗрдорд┐рдХ рдореИрдЯрд╛рдУрдмрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдЧреБрдг


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

  1. BindGetMember - рд╕рдВрдкрддреНрддрд┐ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  2. BindSetMember - рд╕рдВрдкрддреНрддрд┐ рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВ
  3. BindDeleteMember - рдПрдХ рдЖрдЗрдЯрдо рд╣рдЯрд╛рдПрдВ

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

рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡


рдХреБрдЫ рд╡рд░реНрдЧ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рд╣реИрдВред рдбреАрдПрд▓рдЖрд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░рдирд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ "рд╕рд░рдгреА-рдЙрдиреНрдореБрдЦ" рдореЗрдЯрд╛-рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ "рдЗрдВрдбреЗрдХреНрд╕" рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рд╣реИ:

  1. BindGetIndex - рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  2. BindSetIndex - рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдорд╛рди
  3. BindDeleteIndex - рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдореВрд▓реНрдп рд╣рдЯрд╛рдПрдВ

рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ BindGetIndex рдФрд░ BindSetIndex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдПрдХ JavaBridge рдЖрд╡рд░рдг рд╡рд░реНрдЧ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреЛ Java рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрдард┐рдирд╛рдИ рдХреЗ .NET рдХреЛрдб рд╕реЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреНрд░рд╛рд╣рдХ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ ORM рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВред DLR рдореЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ ORM рдХреЛрдб рдХреЛ рдХреНрд▓рд╛рд╕рд┐рдХ C # рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ .NET рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рдирдореВрдирд╛ рдХреЛрдб рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ JavaBridge рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

 JavaBridge java = new JavaBridge(); dynamic customers = java.Load("Customer.class"); dynamic Jason = customers["Bock"]; Jason.Balance = 17.34; customers["Wagner"] = new Customer("Bill"); 

рдЪреВрдВрдХрд┐ рддреАрд╕рд░реА рдФрд░ рдкрд╛рдВрдЪрд╡реАрдВ рд▓рд╛рдЗрдиреЗрдВ рдЗрдВрдбреЗрдХреНрд╕ ([]) рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ рдФрд░ JavaBridge рд╕реЗ рд▓реМрдЯреА рдореЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп BindGetIndex рдФрд░ BindSetIndex рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд▓реМрдЯреА рд╣реБрдИ рд╡рд╕реНрддреБ рдкрд░ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЬрд╛рд╡рд╛ рд░рд┐рдореЛрдЯ рд╡рд┐рдзрд┐ рдордВрдЧрд▓рд╛рдЪрд░рдг (RMI) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ JVM рд╕реЗ рд╡рд┐рдзрд┐ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, DLR C # рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдбреАрдПрд▓рдЖрд░ рдХреЛ "рднрд╛рд╖рд╛рдУрдВ рдХреА рднрд╛рд╖рд╛" рдХреНрдпреЛрдВ рдХрд╣рд╛ рд╣реИред

BindDeleteMember рд╡рд┐рдзрд┐, BindDeleteIndex рдХреА рддрд░рд╣, рдХреЗрд╡рд▓ C # рдФрд░ Visual Basic рдЬреИрд╕реА рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╡рд╛рд▓реА рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк "рд╣рдЯрд╛рдиреЗ" рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдП рдЧрдП рдХреБрдЫ рдСрдкрд░реЗрд╢рди, рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдПрдХ рддрддреНрд╡ рдХреЛ рдЕрд╢рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ BindDeleteMember рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░реНрд╕ рдФрд░ рдСрдкрд░реЗрдЯрд░реНрд╕


DLR рдореЗрдЯрд╛рдмреЙрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдореВрд╣ рдСрдкрд░реЗрдЯрд░реЛрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

  1. BindConvert - рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ
  2. BindBinaryOperation - рджреЛ рдСрдкрд░реЗрдВрдб рдкрд░ рдПрдХ рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
  3. BindUnaryOperation - рдПрдХ рдСрдкрд░реЗрдВрдб рдкрд░ рдПрдХ рдпреВрдирд┐рд░реА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

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

 dynamic x = 13; int y = x + 11; 

BindBinaryOperation рдФрд░ BindUnaryOperation рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдореЗрд╢рд╛ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди ("+") рдпрд╛ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ ("++") рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдбрд╛рдпрдиреЗрдорд┐рдХ рд╡реЗрд░рд┐рдПрдмрд▓ x рдХреЛ рдирд┐рд░рдВрддрд░ 11 рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ BindBinaryOperation рдореЗрдердб рдХрд╣рд▓рд╛рдПрдЧрд╛ ред рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЧрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ CallSite рдирд╛рдордХ рдПрдХ рдЕрдиреНрдп рдкреНрд░рдореБрдЦ DLR рд╡рд░реНрдЧ рдХреЛ рдзрдорд╛рдХрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

CallSite рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЗрд╖рдг


рдпрджрд┐ DLR рд╕реЗ рдЖрдкрдХрд╛ рдкрд░рд┐рдЪрдп рдбрд╛рдпрдирд╛рдорд┐рдХ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд░реЗ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╢рд╛рдпрдж .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ CallSite рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реЛрдВрдЧреЗред рдпрд╣ рдорд╛рдореВрд▓реА рдкреНрд░рдХрд╛рд░, рдЬрд┐рд╕реЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ CallSite < T > рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, System.Runtime.CompilerServices рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ "рд╢рдХреНрддрд┐ рд╕реНрд░реЛрдд" рд╣реИ: рдпрд╣ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдХреВрд▓рди рддрд░реАрдХреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ рдЬреЛ рдЧрддрд┐рд╢реАрд▓ .NET рдХреЛрдб рдХреЛ рддреЗрдЬ рдФрд░ рдХреБрд╢рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рдореИрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ CallSite < T > рдкреНрд░рджрд░реНрд╢рди рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ ред

рдбрд╛рдпрдирд╛рдорд┐рдХ .NET рдХреЛрдб рдореЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ CallSite рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХреЛрдб рдмрдирд╛рдирд╛ рдФрд░ рд╕рдВрдХрд▓рди рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ CallSite < T > рд╡рд░реНрдЧ рдЙрди рдирд╛рдореЛрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ " рд░рдирдЯрд╛рдЗрдо " рдФрд░ " рдХрдВрдкрд╛рдЗрд▓рд░рд╕реЗрд╡рд░реНрд╕ " рд╢рдмреНрдж рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрджрд┐ DLR рдПрдХ "рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рднрд╛рд╖рд╛" рд╣реИ, рддреЛ CallSite < T > рдЗрд╕рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реНрдпрд╛рдХрд░рдгрд┐рдХ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЪрд▓рд┐рдП CallSite рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реИред

 dynamic x = 13; int y = x + 11; 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП BindBinaryOperaion рдФрд░ BindConvert рддрд░реАрдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЖрдкрдХреЛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдбрд┐рд╕рдПрдореНрдмрд▓реНрдб MSIL рдХреЛрдб рдХреА рд▓рдВрдмреА рд╕реВрдЪреА рджрд┐рдЦрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ рдПрдХ рдЪрд┐рддреНрд░ рдмрдирд╛рдпрд╛:



рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╕рдВрдХрд▓рдХ рднрд╛рд╖рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рддрд░реАрдХреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рджреЛ рдСрдкрд░реЗрд╢рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: рдЪрд░ x рдХреЛ рд╕рдВрдЦреНрдпрд╛ ( рд╕рд╛рдЗрдЯ 2 ) рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЗрдВрдЯ ( рд╕рд╛рдЗрдЯ 1 ) рдореЗрдВ рдбрд╛рд▓рдирд╛ ред рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓рд╕рд╛рдЗрдЯ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЖрд░реЗрдЦ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, CallSites рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЪрд┐рддреНрд░ рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореЗрдЯрд╛рдмреЙрдЬрд╝рдЯ рд╡рд┐рдзрд┐ BindConvert рдФрд░ BindBinaryOperation рдХреЛ "CallSite1 рдмрдирд╛рдПрдБ" рдФрд░ "CallSite2 рдмрдирд╛рдПрдБ" рдСрдкрд░реЗрд╢рди рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдмрд╛рдЙрдВрдб рдСрдкрд░реЗрд╢рди рдХреЗрд╡рд▓ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдзреНрдпрдХрд╛рд░реА рддрд░реАрдХреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░рдирд╛ рдбреАрдПрд▓рдЖрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрд╢рди рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╣реЛрддреА рд╣реИ, рдЬрдмрдХрд┐ рдХреЙрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдХрдИ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрд▓ рдХреА рдЧрдИ рдХреЙрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред

рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдВ


рдбреАрдПрд▓рдЖрд░ рдХреЗ рдмрд╣реБрдд рджрд┐рд▓ рдореЗрдВ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдмрд╛рд░рд╣ рдмрд╛рдзреНрдпрдХрд╛рд░реА рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдВрдзреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд▓рдЧрд╛рддрд╛рд░ LINQ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХреБрдЫ рдХреЗ рдкрд╛рд╕ ID DynamicsicMetaObjectProvider рдЕрдиреБрдмрдВрдз рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЧрд╣рд░рд╛ рдЕрдиреБрднрд╡ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдбрд╛рдпрдирд╛рдорд┐рдХрдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рдо рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИред

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

  1. TryCreateInstance
  2. TryInvokeMember
  3. TryInvoke
  4. TryGetMember
  5. TrySetMember
  6. TryDeleteMember
  7. TryGetIndex
  8. TrySetIndex
  9. TryDeleteIndex
  10. TryConvert
  11. TryBinaryOperation
  12. TryUnaryOperation

рдХреНрдпрд╛ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдкрд░рд┐рдЪрд┐рдд рджрд┐рдЦрддреЗ рд╣реИрдВ? рдЖрдкрдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдбрд╛рдпрдиреЗрдорд┐рдХрдореИрдЯрдмреЙрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ BindCreateInstance рдФрд░ BindInvoke рдЬреИрд╕реЗ рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред DynamicMetaObject рд╡рд░реНрдЧ ID DynamicsicMetaObjectProvider рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдбрд╛рдпрдиреЗрдорд┐рдХ рдореАрдЯрдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЙрд╕рдХреА рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдзрд┐ рд╕реЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдореЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЬреБрдбрд╝реЗ рдСрдкрд░реЗрд╢рди рдбрд╛рдпрдиреЗрдорд┐рдХрдСрдмреНрдЬреЗрдХреНрдЯ рдЙрджрд╛рд╣рд░рдг рдкрд░ "рдХреЛрд╢рд┐рд╢" рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдкрд░ рдЕрдкрдиреА рдХреЙрд▓ рдХреЛ рдмрд╕ рд╕реМрдВрдкрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдбрд╛рдпрдиреЗрдорд┐рдХрдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХреНрд▓рд╛рд╕ рдореЗрдВ TryGetMember рдФрд░ TrySetMember рдЬреИрд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП , рдЬрдмрдХрд┐ рдореЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдЧрдВрджреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдХреИрд╢рд┐рдВрдЧ


[рдЖрдк DLR рдкрд░ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ]

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЪрд┐рдВрддрд╛ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╣реИред рдбреАрдПрд▓рдЖрд░ рдЗрди рдЕрдиреБрднрд╡реЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдзрд╛рд░рдг рдЙрдкрд╛рдп рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ CallSite < T > System.Runtime.CompilerServices рдирд╛рдордХ рдПрдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдПрдХ рд╣реА рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рдХрдИ рдЕрдиреНрдп рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдорд▓реНрдЯреАрд▓реЗрд╡рд▓ рдХреИрд╢рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, DLR рдЧрддрд┐рд╢реАрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╢рд┐рдВрдЧ рдХреЗ рддреАрди рдореБрдЦреНрдп рд╕реНрддрд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

  1. рд╡реИрд╢реНрд╡рд┐рдХ рдХреИрд╢
  2. рд╕реНрдерд╛рдиреАрдп рдХреИрд╢
  3. рдкреЙрд▓рд┐рдореЙрд░реНрдлрд┐рдХ рдбреЗрд▓рд┐рдЧреЗрдЯ рдХреИрд╢

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

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

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


All Articles