C # рдЧреБрдг: рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

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


рд╕рд╛рдордЧреНрд░реА


  1. рдкрд░рд┐рдЪрдпред рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЧреБрдг рдкреНрд░рджрд╛рди рдХрд░рдирд╛
  2. рд░рдирдЯрд╛рдЗрдо рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВред рдпрд╣рд╛рдВ, рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рджреА рдЬрд╛рдПрдЧреА, рдЬрд┐рдирдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ рдмрд╣реБрдд рдХрдо рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдХрдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧрдбрд╝рдмрдбрд╝реА рдирд╣реАрдВ рд╣реЛрдЧреА (рдЕрдиреБрдЪрд┐рдд рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЬреБрдиреВрди рдХреЗ рд╡рд┐рдкрд░реАрдд)
  3. рдХреБрдЫ рдЕрд▓реНрдкрдЬреНрдЮрд╛рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬрд┐рдиреНрд╣реЗрдВ рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИред
  4. рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ред рд░рди рдЯрд╛рдЗрдо рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреЛрдбрд╝рдирд╛

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


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

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

рдПрдХ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ (рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ), рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ

  1. IL рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреАрд╡рд░реНрдб рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИрдВред рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдЖрдИрдПрд▓ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ
  2. рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЗрдирдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
  3. рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБред рдЗрдирдореЗрдВ рд╡реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ SecurityAttribute (рд╕реАрдзреЗ рдпрд╛ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ) рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдИрдПрд▓ рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╕реАрдзреЗ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХреНрд╕рдПрдордПрд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

рдЙрджрд╛рд╣рд░рдг


C # рдХреЛрдб рдЬрд┐рд╕рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ
[StructLayout(LayoutKind.Explicit)] [Serializable] [Obsolete] [SecurityPermission(SecurityAction.Assert)] public class Sample { } 


рдкрд░рд┐рдгрд╛рдореА рдЖрдИрдПрд▓
 .class public EXPLICIT ansi SERIALIZABLE beforefieldinit AttributeSamples.Sample extends [System.Runtime]System.Object { .custom instance void [System.Runtime]System.ObsoleteAttribute::.ctor() = (01 00 00 00 ) .permissionset assert = { class 'System.Security.Permissions.SecurityPermissionAttribute, System.Runtime.Extensions, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' = {}} .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {/*constructor body*/} } 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, StructLayoutAttribute рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ IL рдореЗрдВ рдЗрд╕реЗ "рд╕реНрдкрд╖реНрдЯ" рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдпреЛрдЧрджрд╛рди рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - IL рдореЗрдВ ".custom" рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред SecurityPermissionAttribute рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ ".permissionset рдореБрдЦрд░" рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд░рди рдЯрд╛рдЗрдо рдкрд░ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рдиреЗ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕реАрдПрд▓рдПрд╕ рдЕрдиреБрд░реВрдкрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ System.Attribute рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВред рд╕реАрдПрд▓рдЖрдИ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд░рдирдЯрд╛рдЗрдо рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рднрд╛рд╖рд╛рдПрдВ рд╕реАрдЯреАрдПрд╕ рдореЗрдВ рд╕реАрдзреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХреА рдЧрдИ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВред

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

рдЕрдм рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛


рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдирд╛рдо рдФрд░ NameAtribute рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ 2 рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ, рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдирд╛рдо рд░рдЦрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп [рдирд╛рдо] (рдЬреЛ рдХрд┐ рдкреНрд░рддреНрдпрдп рдХреЗ рдмрд┐рдирд╛ рд╣реИ), рд╕рдВрдХрд▓рдХ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред [NameAttribute] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рдо NameAttribute рдХреЛ рд░рдЦреЗрдВрдЧреЗ, рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рдирд╛рдордХрд░рдг рдХрд░рддреЗ рд╕рдордп рдХрд▓реНрдкрдирд╛ рдХреА рдХрдореА рдХреЗ рд╕рд╛рде рдРрд╕реА рд░рд╣рд╕реНрдпрдордп рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИред рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрд┐рдирд╛ рдкреНрд░рддреНрдпрдп рдХреЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо [@ рдирд╛рдо] рд╕реЗ рдкрд╣рд▓реЗ рдХреБрддреНрддреЗ рдХрд╛ рдЪрд┐рд╣реНрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ, [рдирд╛рдо] рдПрдХ рдордЬрд╛рдХ рд╣реИ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ)ред

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

рдШреЛрд╖рдгрд╛ рдШреЛрд╖рдгрд╛ рд╕рд┐рдВрдЯреЗрдХреНрд╕
 using System; using System.Runtime.InteropServices; using System.Security.Permissions; using AttributeSamples; [assembly:All] [module:All] namespace AttributeSamples { [AttributeUsage(AttributeTargets.All)] public class AllAttribute : Attribute { } [All] //   public class Usage { [All] //   [return:All] //     public int GiveMeInt<[All]T>([All]int param) { return 5 + param; } [All] //   [field:All] //        public event Action Event; [All] //   [field: All] //       public int Action { get; set; } } } 


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

рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░
 [AttributeUsage(AttributeTargets.All, AllowMultiple = true)] public class AttrParamsAttribute : Attribute { public AttrParamsAttribute(int positional) //  { } public int Named { get; set; } //  } [AttrParams(1)] [AttrParams(1, Named = 2)] public class AttrParams { } 


рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ (рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ) рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП:

  1. рдмреВрд▓, рдмрд╛рдЗрдЯ, рдЪрд╛рд░, рдбрдмрд▓, рдлреНрд▓реЛрдЯ, рдЗрдВрдЯ, рд▓реЙрдиреНрдЧ, рд╢реЙрд░реНрдЯ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЖрдЧреЗ рдЖрджрд┐рдо, рджрд╢рдорд▓рд╡ рдХреЛ рдЫреЛрдбрд╝рдХрд░
  2. рд╡рд╕реНрддреБ
  3. System.Type
  4. enum
  5. рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгреА

рдпрд╣ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрдХрд▓рди-рд╕рдордп рд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдКрдкрд░ рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдЗрд╕ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдХреЗ рд╣рдо int рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдВрднрд╡ рд╣реИред

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

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

рдЫрджреНрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдмрд┐рдВрдм рдирд╣реАрдВ рд╣реИрдВ
 [Serializable] [StructLayout(LayoutKind.Explicit)] public class CustomPseudoCustom { } class Program { static void Main() { var onlyCustom = typeof(CustomPseudoCustom).GetCustomAttributes(); // SerializableAttribute } } 


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

рд░рдирдЯрд╛рдЗрдо-рд╕рдХреНрд╖рдо рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ


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

рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдЫрджреНрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рд╕реАрдПрд▓рдЖрдИ рдпрд╛ рд╕рдВрдХрд▓рдХ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рддреА рд╣реИ) рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреА рд╣реИред

рдЫрджреНрдо-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ (рд╡реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ)ред
рд╕реАрдПрд▓рдЖрдИ рдЧреБрдг:
рдЧреБрдгрд╡рд┐рд╡рд░рдг
AssemblyAlgorithmIDAttributeрдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИред рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд╢рд▓рд╛рдЧреНрдб рдХреНрд╖реЗрддреНрд░
AssemblyFlagsAttributeрд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЭрдВрдбреЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдлрд╝реНрд▓реИрдЧреНрд╕ рдлрд╝реАрд▓реНрдб
DllImportAttributeрдПрдХ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рд╛рдЧреВ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред Lags.PinvokeImpl рдЗрд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рдмрд┐рдЯ; ImplMap рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (MappingFlags, MemberForwarded, ImportName рдФрд░ ImportScope рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ)
StructLayoutAttributeрдЖрдкрдХреЛ рд╕рдВрджрд░реНрдн рдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╝реАрд▓реНрдб рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП TypeDef.Flags.LayoutMask рдлрд╝реАрд▓реНрдб рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ TypeDef.lags.StringFormatMask, ClassLayout.PackingSize рдФрд░ ClassLayout.ClassSize рдлрд╝реАрд▓реНрдб рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
FieldOffsetAttributeрдПрдХ рд╕рдВрджрд░реНрдн рдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЦреЗрддреЛрдВ рдХреА рдмрд╛рдЗрдЯ рдСрдлрд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП FieldLayout.OffSet рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
InAttributeрдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ [рдореЗрдВ] рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Param.Flags.In рдмрд┐рдЯ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
OutAttributeрдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ [рдЖрдЙрдЯ] рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Param.Flags.Out рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
MarshalAsAttributeрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдмрдВрдзрд┐рдд рдФрд░ рдЕрдирд╡рд╛рдВрдЯреЗрдб рдХреЛрдб рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рдорд╛рд░реНрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдПред (Param.Flags.HasFieldMarshal рдмрд┐рдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП); рдлрд╝реАрд▓реНрдбрдорд╛рд░реНрд╢рд▓ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдЕрднрд┐рднрд╛рд╡рдХ рдФрд░ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдХреЗ)
MethodImplAttributeрдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП Method.ImplFlags рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ


рд╕реАрдПрд▓рдПрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ - рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
рдЧреБрдгрд╡рд┐рд╡рд░рдг
AttributeUsageAttributeрдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
ObsoleteAttributeрдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдЗрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
CLSCompliantAttributeрдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЖрдЗрдЯрдо рд╕реАрдПрд▓рдПрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╡рд┐рд╡рд┐рдз рд░реЛрдЪрдХ
рдЧреБрдгрд╡рд┐рд╡рд░рдг
ThreadStaticAttributeрд╕реНрдЯреНрд░реАрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╝реАрд▓реНрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
ConditionalAttributeрдПрдХ рд╕рдВрдХрд▓рд┐рдд рд╕реНрдерд┐рддрд┐ (рдирд┐рд░реНрджрд┐рд╖реНрдЯ / рдкрд░рд┐рднрд╛рд╖рд┐рдд) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдФрд░ рдЖрдИрдПрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдХреЗрд╡рд▓ рд╢реВрдиреНрдп рд╡рд┐рдзрд┐ рдХреЛ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред
DecimalConstantAttributeрдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рд╕реНрдЯреЛрд░ рджрд╢рдорд▓рд╡ рдирд┐рд░рдВрддрд░ рдорд╛рди
DefaultMemberAttributeInvokeMember рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
CompilationRelaxationsAttributeрдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреБрджреЗрд╢реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдЕрдкрд╡рд╛рдж рд╕рдЦреНрдд рдпрд╛ рд╢рд┐рдерд┐рд▓ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдЖрдк рдХреЗрд╡рд▓ NoStringInterning рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
FlagsAttributeрдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдИрдирдо рдХреЛ рдЭрдВрдбреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
IndexerNameAttributeрдЙрд╕ рдирд╛рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рд╕реАрдзреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
ParamArrayAttributeрдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИред

рдЙрдкрдпреЛрдЧреА рдЧреБрдг


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

DebuggerDisplayAttribute рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдмрдЧрд░ рдЪрд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдпрд╛ рдЙрд╕рдХреЗ рд╕рджрд╕реНрдп рдХреЛ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ рди рдХреЗрд╡рд▓)ред

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


DebuggerBrowsableAttribute рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбреАрдмрдЧрд░ рдЪрд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдпрд╛ рдЧреБрдг рдХреЛ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ DebuggerBrowsableState рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 3 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  • рдХрднреА рдирд╣реАрдВ - рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдлрд╝реАрд▓реНрдб рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
  • рдврд╣ рдЧрдпрд╛ - рдХреНрд╖реЗрддреНрд░ рдЕрдирд╕реБрд▓рдЭрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред
  • рд░реВрдЯрд╣реЗрдбреНрдб - рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЬрд┐рди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП)



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



рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ

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

рдЗрдВрдЬрди рдбрд┐рдмреНрдмреЗ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ред рд▓рд┐рдирдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рджреЛрдиреЛрдВ рдореЗрдВ, рд╕реНрдЯреНрд░реАрдо ( TLS рдФрд░ TSD, рдХреНрд░рдорд╢рдГ) рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рд╕реНрдерд╛рдиреАрдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпреЗ рдХреНрд╖реЗрддреНрд░ рд╕реНрд╡рдпрдВ рдмрд╣реБрдд рдЫреЛрдЯреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдПрдХ ThreadLocalInfo рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдПрдХ рд╕реВрдЪрдХ рдЬрд┐рд╕реЗ рдЯреАрдПрд▓рдПрд╕ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдХреЗрд╡рд▓ рдПрдХ рд╕реНрд▓реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╣реА 3 рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдереНрд░реЗрдб, рдПрдкрдбреЛрдореИрди, рдХреНрд▓рд░рдЯрд▓рдЗрдиреНрдлреЛред рд╣рдо рдкрд╣рд▓реЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдбрд▓реЛрдХрдмреНрд▓реЙрдХ рдФрд░ рдереНрд░реЗрдбрд▓реЛрдХрд▓рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореЗрдореЛрд░реА рдореЗрдВ рдлреНрд▓реЛ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рднрдВрдбрд╛рд░рдг рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рд╕реЗ:

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

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

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

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

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

рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛


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

рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  1. рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
  2. рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛

рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


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

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

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

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

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

рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛


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

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

рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ ICustomAttributeProvider рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрд╕реЗрдВрдмрд▓реА, рдореЗрдВрдмрд░рдЗрдиреНрдлреЛ, рдореЙрдбреНрдпреВрд▓, рдкреИрд░рд╛рдореАрдЯрд░рдЗрдиреНрдлреЛ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ, рд╕рджрд╕реНрдпрдЗрдиреНрдлреЛ рдХреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдЯрд╛рдЗрдк, EventInfo, FieldInfo, MethodBase, PropertyInfo рд╣реИрдВред

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

рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдиреАрдЪреЗ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рдзрд┐ рдлреИрд▓реА рд╣реБрдИ рд╣реИ, рдореИрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд╣рд╛рдВ рднреА рдмреВрд▓ рдЗрдирд╣реЗрд░рд┐рдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЕрдзрд┐рднрд╛рд░ рд╣реЛрддрд╛ рд╣реИ ( рд╕рддреНрдп рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде )ред рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдореВрд▓ рд╡рд░реНрдЧ рдпрд╛ рдЖрдзрд╛рд░ рд╡рд┐рдзрд┐ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрджрд┐ рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд╣реИ = рднрдбрд╝рдХрд╛рддреА рд╣реИ , рддреЛ рдЗрд╕реЗ рднреА рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА
рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдорд╡рд┐рд╡рд░рдг
GetCustomAttributes <LogAttribute> (рдмреВрд▓ рд╡рд┐рд░рд╛рд╕рдд)рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рд╣реИ, рддреЛ 1 рддрддреНрд╡ рдХрд╛ рдПрдиреНрдпреВрдорд░реЗрд╢рди рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
GetCustomAttribute <LogAttribute> (рдмреВрд▓ рд╡рд┐рд░рд╛рд╕рдд)рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХрд▓ рдЧреБрдг рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдХрдИ рд╣реИрдВ, рддреЛ рдПрдХ System.Reflection.AmbiguousMatchException рдХреЛ рдлреЗрдВрдХ рджреЗрдВ : рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдИ рдХрд╕реНрдЯрдо рдЧреБрдг рдЕрдкрд╡рд╛рдж рдкрд╛рдП рдЧрдП
GetCustomAttributes ()рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ
GetCustomAttributesData ()рдПрдХ рдкреНрд░рддрд┐рдкреВрд░реНрддрд┐ CustomAttributeData, рдЬрд┐рд╕рдореЗрдВ рдРрд╕реЗ рдЧреБрдг рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛, рдкреИрд░рд╛рдореАрдЯрд░ (рдирд╛рдо рдФрд░ рд╕реНрдерд┐рддрд┐), рдирд┐рд░реНрдорд╛рддрд╛ рддрд░реНрдХ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ
рдЕрд▓рдЧрдпрджрд┐ рдЧреБрдг рддрддреНрд╡ рдкрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рд╣реА рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ рддреЛ рдЧрд▓рдд рд╣реИ

рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдЧрдП рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдбреЗрдореЛ рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред

рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рдПрдБ
 [AttributeUsage(AttributeTargets.All, AllowMultiple = true)] public class LogAttribute : Attribute { public string LogName { get; set; } } [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] public class SerializeAttribute : Attribute { public string SerializeName { get; set; } } [Log(LogName = "LogBase1")] [Log(LogName = "LogBase2")] [Serialize(SerializeName = "SerializeBase1")] [Serialize(SerializeName = "SerializeBase2")] public class RandomDomainEntityBase { [Log(LogName = "LogMethod1")] [Log(LogName = "LogMethod2")] [Serialize(SerializeName = "SerializeMethod1")] [Serialize(SerializeName = "SerializeMethod2")] public virtual void VirtualMethod() { throw new NotImplementedException(); } } [Log(LogName = "LogDerived1")] [Log(LogName = "LogDerived2")] [Serialize(SerializeName = "SerializeDerived1")] [Serialize(SerializeName = "SerializeDerived2")] public class RandomDomainEntityDerived : RandomDomainEntityBase { [Log(LogName = "LogOverride1")] [Log(LogName = "LogOverride2")] [Serialize(SerializeName = "SerializeOverride1")] [Serialize(SerializeName = "SerializeOverride2")] public override void VirtualMethod() { throw new NotImplementedException(); } } class Program { static void Main() { Type derivedType = typeof(RandomDomainEntityDerived); MemberInfo overrideMethod = derivedType.GetMethod("VirtualMethod"); // overrideMethod.GetCustomAttribute(typeof(LogAttribute)); //System.Reflection.AmbiguousMatchException: Multiple custom attributes of the same type found. // overrideMethod.GetCustomAttribute<LogAttribute>(false); // System.Reflection.AmbiguousMatchException: Multiple custom attributes of the same type found. // Attribute.GetCustomAttribute(derivedType, typeof(SerializeAttribute)); // System.Reflection.AmbiguousMatchException: Multiple custom attributes of the same type found. IEnumerable<Attribute> allCustom = overrideMethod.GetCustomAttributes(); //LogOverride1 LogOverride2 SerializeOverride1 SerializeOverride2 LogMethod1 LogMethod2 IList<CustomAttributeData> allCustomInfo = overrideMethod.GetCustomAttributesData(); //  ,     IEnumerable<LogAttribute> typedCustom1 = overrideMethod.GetCustomAttributes<LogAttribute>(inherit:false); //LogOverride1 LogOverride2 IEnumerable<LogAttribute> typedInheritedCustom1 = overrideMethod.GetCustomAttributes<LogAttribute>(inherit:true); //LogOverride1 LogOverride2 LogMethod1 LogMethod2 IEnumerable<SerializeAttribute> typedCustom2 = overrideMethod.GetCustomAttributes<SerializeAttribute>(inherit:false); //SerializeOverride1 SerializeOverride2 IEnumerable<SerializeAttribute> typedInheritedCustom2 = overrideMethod.GetCustomAttributes<SerializeAttribute>(inherit:true); //SerializeOverride1 SerializeOverride2 Attribute[] customFromStaticClass = Attribute.GetCustomAttributes(overrideMethod, typeof(SerializeAttribute), inherit:true); //SerializeOverride1 SerializeOverride2 IEnumerable<Attribute> classCustom = derivedType.GetCustomAttributes(); //LogDerived1 LogDerived2 SerializeDerived1 SerializeDerived2 LogBase1 LogBase2 IList<CustomAttributeData> classCustomInfo = derivedType.GetCustomAttributesData(); //  ,     IEnumerable<LogAttribute> typedClassCustom1 = derivedType.GetCustomAttributes<LogAttribute>(false); //LogDerived1 LogDerived2 IEnumerable<LogAttribute> typedInheritedClassCustom1 = derivedType.GetCustomAttributes<LogAttribute>(true); //LogDerived1 LogDerived2 LogBase1 LogBase2 IEnumerable<SerializeAttribute> typedClassCustom2 = derivedType.GetCustomAttributes<SerializeAttribute>(false); //SerializeDerived1 SerializeDerived2 IEnumerable<SerializeAttribute> typedInheritedClassCustom2 = derivedType.GetCustomAttributes<SerializeAttribute>(true); //SerializeDerived1 SerializeDerived2 } } 


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

рдХреЛрдб
 public class TypeCreator { private const string TypeSignature = "DynamicType"; private const string ModuleName = "DynamicModule"; private const string AssemblyName = "DynamicModule"; private readonly TypeBuilder _typeBuilder = GetTypeBuilder(); public object CreateTypeInstance() { _typeBuilder.DefineNestedType("ClassName"); CreatePropertyWithAttribute<SerializeAttribute>("PropWithAttr", typeof(int), new Type[0], new object[0]); Type newType = _typeBuilder.CreateType(); return Activator.CreateInstance(newType); } private void CreatePropertyWithAttribute<T>(string propertyName, Type propertyType, Type[] ctorTypes, object[] ctorArgs) where T : Attribute { var attributeCtor = typeof(T).GetConstructor(ctorTypes); CustomAttributeBuilder caBuilder = new CustomAttributeBuilder(attributeCtor, ctorArgs); PropertyBuilder newProperty = CreateProperty(propertyName, propertyType); newProperty.SetCustomAttribute(caBuilder); } private PropertyBuilder CreateProperty(string propertyName, Type propertyType) { FieldBuilder fieldBuilder = _typeBuilder.DefineField(propertyName, propertyType, FieldAttributes.Private); PropertyBuilder propertyBuilder = _typeBuilder.DefineProperty(propertyName, PropertyAttributes.HasDefault, propertyType, null); MethodAttributes getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig; MethodBuilder getter = GenerateGetter(); MethodBuilder setter = GenerateSetter(); propertyBuilder.SetGetMethod(getter); propertyBuilder.SetSetMethod(setter); return propertyBuilder; MethodBuilder GenerateGetter() { MethodBuilder getMethodBuilder = _typeBuilder.DefineMethod($"get_{propertyName}", getSetAttr, propertyType, Type.EmptyTypes); ILGenerator getterIl = getMethodBuilder.GetILGenerator(); getterIl.Emit(OpCodes.Ldarg_0); getterIl.Emit(OpCodes.Ldfld, fieldBuilder); getterIl.Emit(OpCodes.Ret); return getMethodBuilder; } MethodBuilder GenerateSetter() { MethodBuilder setMethodBuilder = _typeBuilder.DefineMethod($"set_{propertyName}", getSetAttr, null,new [] { propertyType }); ILGenerator setterIl = setMethodBuilder.GetILGenerator(); setterIl.Emit(OpCodes.Ldarg_0); setterIl.Emit(OpCodes.Ldarg_1); setterIl.Emit(OpCodes.Stfld, fieldBuilder); setterIl.Emit(OpCodes.Ret); return setMethodBuilder; } } private static TypeBuilder GetTypeBuilder() { var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName(AssemblyName), AssemblyBuilderAccess.Run); ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(ModuleName); TypeBuilder typeBuilder = moduleBuilder.DefineType(TypeSignature, TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.AutoClass | TypeAttributes.AnsiClass | TypeAttributes.BeforeFieldInit | TypeAttributes.AutoLayout,null); return typeBuilder; } } public class Program { public static void Main() { object instance = new TypeCreator().CreateTypeInstance(); IEnumerable<Attribute> attrs = instance.GetType().GetProperty("PropWithAttr").GetCustomAttributes(); // Serializable } } 

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


All Articles