рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ: 4 рдХрд╛ рднрд╛рдЧ 1


рдкрд░рд┐рдЪрдп


рдпрд╣ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдпрд╛, рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрдЦреЗрдВред рдПрдХ рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ?


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


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


struct Number { public static Number Parse(string source) { // ... if(!parsed) { throw new ParsingException(); } // ... } public static bool TryParse(string source, out Number result) { // .. return parsed; } } 

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕рдореЗрдВ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдХреГрддреНрд░рд┐рдо рдмрдирд╛ рджрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Parse рд╡рд┐рдзрд┐ рдХреЛ рджреЗрдЦреЗрдВред рдЗрд╕реЗ рдЕрдкрд╡рд╛рдж рдХреНрдпреЛрдВ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП?


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

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


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


рдЕрд╡рд▓реЛрдХрди


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



рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрдбрд╝реА .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЕрдВрджрд░ рджреЛ рджреБрдирд┐рдпрд╛рдПрдБ рд╣реИрдВ: рд╕рдм рдХреБрдЫ рдЬреЛ CLR рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреНрдп рд╣рд┐рд╕реНрд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред


  • рд╕рдВрд░рдЪрд┐рдд рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ (SEH) рдПрдХ рдорд╛рдирдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ Windows рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдЬрдм unsafe рддрд░реАрдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд <-> CLR рд░реВрдкрд╛рдВрддрд░рдг рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ: рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕реЗ CLR рдФрд░ рдкрд┐рдЫрдбрд╝реЗ рдореЗрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ CLR рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдзрд┐ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ CLR рд╡рд┐рдзрд┐ рдХрд╣ рд╕рдХрддрд╛ рд╣реИред
  • рд╡реЗрдХреНрдЯрд░реЗрдб рдПрдХреНрд╕реЗрдкреНрд╢рди рд╣реИрдВрдбрд▓рд┐рдВрдЧ (рд╡реАрдИрдПрдЪ) рдПрд╕рдИрдПрдЪ рдХреА рдПрдХ рдЬрдбрд╝ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ FirstChanceException рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • COM + рдЕрдкрд╡рд╛рдж рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрд░реЛрдд COM рдШрдЯрдХ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, COM рдФрд░ .NET рд╡рд┐рдзрд┐ рдХреЗ рдмреАрдЪ рдПрдХ рдкрд░рдд рдХреЛ COM рддреНрд░реБрдЯрд┐ рдХреЛ .NET рдЕрдкрд╡рд╛рдж рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
  • рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, HRESULT рдХреЗ рд▓рд┐рдП рд░реИрдкрд░ред рдЙрдиреНрд╣реЗрдВ рдПрдХ WinAPI рдореЙрдбрд▓ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд░рд┐рдЯрд░реНрди рдорд╛рди рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИ, рдЬрдмрдХрд┐ рд░рд┐рдЯрд░реНрди рдорд╛рдиреЛрдВ рдХреЛ рд╡рд┐рдзрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдореЙрдбрд▓ рдореЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИ рдЬреЛ .NET рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рд╕реАрдПрд▓рдЖрдИ рд╕реЗ рдКрдкрд░ рдХреА рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдХрд╛рд░реНрдп рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓ рд╣реА рдореЗрдВ VB.NET рдпрд╛ F # рдореЗрдВ C # рдореЗрдВ рдореМрдЬреВрдж рдлрд┐рд▓реНрдЯрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╕рдореГрджреНрдз рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдереАред


рд░рд┐рдЯрд░реНрди рдХреЛрдб рдмрдирд╛рдоред рдЕрдкрд╡рд╛рдж


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


рдорд╛рди рд▓реЗрдВ рдХрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рддрд░реАрдХреЛрдВ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИред рддрдм рд╕рднреА рддрд░реАрдХреЗ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ:


 public bool TryParseInteger(string source, out int result); public DialogBoxResult OpenDialogBox(...); public WebServiceResult IWebService.GetClientsList(...); public class DialogBoxResult : ResultBase { ... } public class WebServiceResult : ResultBase { ... } 

рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:


 public ShowClientsResult ShowClients(string group) { if(!TryParseInteger(group, out var clientsGroupId)) return new ShowClientsResult { Reason = ShowClientsResult.Reason.ParsingFailed }; var webResult = _service.GetClientsList(clientsGroupId); if(!webResult.Successful) { return new ShowClientsResult { Reason = ShowClientsResult.Reason.ServiceFailed, WebServiceResult = webResult }; } var dialogResult = _dialogsService.OpenDialogBox(webResult.Result); if(!dialogResult.Successful) { return new ShowClientsResult { Reason = ShowClientsResult.Reason.DialogOpeningFailed, DialogServiceResult = dialogResult }; } return ShowClientsResult.Success(); } 

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


рдХреЛрдИ рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреА рд╣реИ? рдпрд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, TryParseInteger рдкрджреНрдзрддрд┐ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдПрдХ рд░рд┐рдЯрд░реНрди рдорд╛рди рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ true рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред рдпрджрд┐ рдпрд╣ рдареАрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ false рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рдПрдХ рдиреБрдХрд╕рд╛рди рд╣реИ: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рдХреЛ out int result рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо out int result рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ out int result ред рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рддрд░рдл рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╣реИ рдФрд░ рдзрд╛рд░рдгрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ out рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ "рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ" рд╕рд╛рд░ рд╣реИред рджреВрд╕рд░реА рддрд░рдл, рд╣рдо рд╣рдореЗрд╢рд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдПрдХ рд╕реЗрд╡рд╛ рд╕реЗ рдЖрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣рдореЗрд╢рд╛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдФрд░ рдЕрдЪреНрдЫреА рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реЗрддреЗ рд╣реИрдВ:


 public int ParseInt(string source); 

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


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

рдЕрдВрдд рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЛ


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


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


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


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


рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдореА рд╕реА # рдПрдХ fault рдмреНрд▓реЙрдХ рд╣реИ рдЬреЛ рдЬрдм рднреА рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ рд╕рдХреНрд░рд┐рдп рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕реНрдЯреЗрд░реЙрдпрдб рдкрд░ finally рдкрд╕рдВрдж рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдерд╛, рддреЛ рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 try { //... } fault exception { _logger.Warn(exception); } 

рдПрдХ рдФрд░ рдмрд╛рдд рдЬреЛ рдореБрдЭреЗ рдЗрд╕ рдкрд░рд┐рдЪрдп рдореЗрдВ рдЫреВрдиреА рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рдЕрдкрд╡рд╛рдж рдлрд╝рд┐рд▓реНрдЯрд░ред рдпрд╣ .NET рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди C # рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирдП рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдЕрдкрд╡рд╛рдж рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗрд╡рд▓ v рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред 6.0ред рдлрд┐рд▓реНрдЯрд░ рдХреЛ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рд╣реЛ рдЬреЛ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рдЬрдм рд╣рдо рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рджреГрд╢реНрдп рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреВрд░реЗ рд╕рдореВрд╣ рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмреЗрд╢рдХ, рдореЗрд░рд╛ рдорддрд▓рдм рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдб рд╣реИ:


 try { //... } catch (ParserException exception) { switch(exception.ErrorCode) { case ErrorCode.MissingModifier: // ... break; case ErrorCode.MissingBracket: // ... break; default: throw; } } 

рдареАрдХ рд╣реИ, рдЕрдм рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:


 try { //... } catch (ParserException exception) when (exception.ErrorCode == ErrorCode.MissingModifier) { // ... } catch (ParserException exception) when (exception.ErrorCode == ErrorCode.MissingBracket) { // ... } 

рдпрд╣рд╛рдВ рд╕реБрдзрд╛рд░ switch рдирд┐рд░реНрдорд╛рдг рдХреА рдХрдореА рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдирдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХрдИ рдЪреАрдЬреЛрдВ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ:


  • рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ when рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рд╣реА рд╣реИ;
  • рдЗрд╕ рдирдП рд░реВрдк рдореЗрдВ рдХреЛрдб рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдиреЗ рд╕реЗ рд╣рдорд╛рд░рд╛ рдорд╕реНрддрд┐рд╖реНрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢реБрд░реВ рдореЗрдВ catch рдФрд░ switch-case рдирд╣реАрдВ рдЦреЛрдЬрддрд╛ switch-case ;
  • рдЕрдВрддрд┐рдо рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдирд╣реАрдВ: рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреБрд▓рдирд╛ рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд▓рдд рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдлрд┐рд░ рд╕реЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ switch рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдХрдИ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рдЕрдкрд╡рд╛рдж рдХреЛ рдЙрд╕ рд╕реНрдерд╛рди рдХреЗ рдмреАрдЪ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝рдХрд░ рдХреЛрдИ рдЕрдиреНрдп рдХреЙрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдЪреЗрдХ рд╣реЛрддрд╛ рд╣реИред


 static void Main() { try { Foo(); } catch (Exception ex) when (Check(ex)) { ; } } static void Foo() { Boo(); } static void Boo() { throw new Exception("1"); } static bool Check(Exception ex) { return ex.Message == "1"; } 

рдмрд┐рдирд╛ рдХрд┐рд╕реА рд░реЛрдХ-рдЯреЛрдХ рдХреЗ


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


рдХреНрд░рдордмрджреНрдзрддрд╛


рдЪрд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рджреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЛрдореЗрди рдХреЗ рдмреАрдЪ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдПрдХ рдХреЙрд▓ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЛ рдЬреЛрдбрд╝рд╛)ред


  class Program { static void Main() { try { ProxyRunner.Go(); } catch (Exception ex) when (Check(ex)) { ; } } static bool Check(Exception ex) { var domain = AppDomain.CurrentDomain.FriendlyName; // -> TestApp.exe return ex.Message == "1"; } public class ProxyRunner : MarshalByRefObject { private void MethodInsideAppDomain() { throw new Exception("1"); } public static void Go() { var dom = AppDomain.CreateDomain("PseudoIsolated", null, new AppDomainSetup { ApplicationBase = AppDomain.CurrentDomain.BaseDirectory }); var proxy = (ProxyRunner) dom.CreateInstanceAndUnwrap(typeof(ProxyRunner).Assembly.FullName, typeof(ProxyRunner).FullName); proxy.MethodInsideAppDomain(); } } } 

рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреИрдХ рдЕрдирд░реЛрд▓рд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИред рдЪрд▓рд┐рдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджреЗрдЦрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдЕрдкрд╡рд╛рдж рдХреА рдкреАрдврд╝реА рд╕реЗ рдкрд╣рд▓реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


StackUnroll


рджреВрд╕рд░рд╛ рдЗрд╕рдХреЗ рдмрд╛рдж рд╣реИ:


StackUnroll2


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


 [StructLayout(LayoutKind.Explicit)] class Cast { [FieldOffset(0)] public Exception Exception; [FieldOffset(0)] public object obj; } static void Main() { try { ProxyRunner.Go(); Console.ReadKey(); } catch (RuntimeWrappedException ex) when (ex.WrappedException is Program) { ; } } static bool Check(Exception ex) { var domain = AppDomain.CurrentDomain.FriendlyName; // -> TestApp.exe return ex.Message == "1"; } public class ProxyRunner : MarshalByRefObject { private void MethodInsideAppDomain() { var x = new Cast {obj = new Program()}; throw x.Exception; } public static void Go() { var dom = AppDomain.CreateDomain("PseudoIsolated", null, new AppDomainSetup { ApplicationBase = AppDomain.CurrentDomain.BaseDirectory }); var proxy = (ProxyRunner)dom.CreateInstanceAndUnwrap(typeof(ProxyRunner).Assembly.FullName, typeof(ProxyRunner).FullName); proxy.MethodInsideAppDomain(); } } 

C # рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИ (рдореИрдВ рдЖрдкрдХреЛ MSIL рдХреЗ рд╕рд╛рде рдЕрддреНрдпрд╛рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛) рдореИрдВрдиреЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдЪрд╛рд▓ рдЪрд▓ рдХрд░ рдПрдХ рдЧреИрд░-рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдбрд╛рд▓реА, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдиреБрд╡рд╛рджрдХ рд╕реЛрдЪреЗрдВрдЧреЗ рдХрд┐ рд╣рдо Exception рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо Program рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдордгреАрдп рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдпрднрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВред рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ RuntimeWrappedException рдЧреИрд░-рдЕрдкрд╡рд╛рдж рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ Program рдкреНрд░рдХрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рдо рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмреБрд░реА рдЦрдмрд░ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ: рдХреЙрд▓рд┐рдВрдЧ proxy.MethodInsideAppDomain(); SerializationException рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛:



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


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

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


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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдЖрдк рд╣рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЧрд┐рддреБрдм рдкрд░ рдПрдХ рд╕реНрдЯрд╛рд░ рджреЗрдирд╛ рд╣реИ рдпрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдлреЛрд░реНрдХ рдХрд░рдирд╛ рд╣реИ github / sidristij / dotnetbook ред

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


All Articles