рдЬрдм
рдХреЛрдб рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдереЛрдбрд╝реА рдЬрдЯрд┐рд▓рддрд╛ рдкреИрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ: рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреВрд░реНрд╡ рд╢рд░реНрдд рдФрд░ рдкреЛрд╕реНрдЯрдХрдВрдбрд┐рд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде
рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреНрд▓рд╛рд╕ ms рдлреНрд░реЗрдорд▓реАрдм рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ 4 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╕реЗ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡реЗ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд┐рдзрд╛рдирд╕рднрд╛ред
рдпрд╣ рдмрдбрд╝реА рд╡рд┐рддрд░рд┐рдд рдЯреАрдореЛрдВ рдореЗрдВ рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЪреВрдВрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рдореБрдЦ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЕрдЪреНрдЫреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рдВрдХреНрд░рдордг рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЛрдб рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд "рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдореЛрдб" рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдореЗрдВ "рд╣рд╛рд░реНрдбрд╡рд╛рдпрд░" рдкреВрд░реНрд╡ рд╢рд░реНрдд рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╡реЗ рд╕рдмрдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрдВ, рдЪрд╛рд╣реЗ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдбреЗрд╡рд▓рдкрд░ рдХреА рдорд╢реАрди рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдпрд╛ рдирд╣реАрдВред
рд╕рдорд╕реНрдпрд╛ рдХрдерди
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦрдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИред
class SimpleClass { public int Foo(string s) { Contract.Requires(s != null); return s.Length; } }
рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдФрд░ рдЬрдм рд╣рдо
рдлреВ рд╡рд┐рдзрд┐ рдХреЛ
рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрдиреБрдмрдВрдз рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрддрд╛ рд╣реИ рдХрд┐, рдЬрдм рдХреЛрдб рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдкреНрд░реАрдСрдиреНрдбрд┐рд╢рди рдЪреЗрдХрд┐рдВрдЧ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж 'System.Diagnonics.Contracts .__ ContractsRuntime.ContractException' рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛ред
рд╣рд╛рдВ, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐
рдЕрдкрд╡рд╛рдж рдкреАрдврд╝реА рдХреЛрдб рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рдВрдХрд▓рди рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ ред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдб рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд┐рдирд╛, рдЗрд╕ рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди
NullReferenceExcpetion рдХреА рдкреАрдврд╝реА рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рддрд░реНрдХреЛрдВ рдХрд╛ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рддреНрдпрд╛рдкрди рдирд╣реАрдВ рд░рд╣реЗрдЧрд╛ред рдореИрдВ рдмрд╛рд░-рдмрд╛рд░ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдпрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ: "рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл? рдореЗрд░рд╛ рдЪреЗрдХ рдХрд╣рд╛рдВ рдЧрдпрд╛! тАЭ
рдЪреВрдВрдХрд┐ рд╣рдо рдРрд╕реЗ "рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл?" рдХреЛ рд╕реБрдирдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рдкрд╛рд╕ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдиреБрдмрдВрдз рдирд╣реАрдВ рд╣реИ, рд╣рдо рдПрдХ рдкреВрд░реНрд╡-рднреБрдЧрддрд╛рди рдЬрд╛рдВрдЪ рдХреЛ рдЕрдзрд┐рдХ рдЧрд╣рди рддрд░реАрдХреЗ рд╕реЗ рд╕реАрд╡реЗ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рдореИрдиреБрдЕрд▓ рдкреВрд░реНрд╡ рд╢рд░реНрдд рдЬрд╛рдБрдЪ
рдХреЛрдб рдЕрдиреБрдмрдВрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреВрд░реНрд╡ рд╢рд░реНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдореМрдЬреВрджрд╛ рдкрджреНрдзрддрд┐ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ (рдпрд╛рдиреА, рдкреВрд░реНрд╡ рд╢рд░реНрдд рдХреА рдЬрд╛рдВрдЪ) рдХреА рдЬрд╛рдВрдЪ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реНрдг-рдкреВрд░реНрд╡ рд╡рд░реАрдпрддрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ рдмрд╛рдж
рдЕрдиреБрдмрдВрдз рдХреЙрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
ред EndContractBlock :
public class SimpleClass { public int Foo(string s) { if (s == null) throw new ArgumentNullException("s"); Contract.EndContractBlock(); return s.Length; } }
рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЙрд▓ рдЬреЛрдбрд╝рдирд╛
ред EndContractBlock рдкреВрд░реНрдг рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдПрдХ (рдпрд╛ рдХрдИ) рдЪреЗрдХ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдЕрдм, рдРрд╕реЗ рдХрд┐рд╕реА рднреА рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдХрд╛ рдХреЛрдИ рдЕрдиреБрдмрдВрдз рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЛрдб рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ред рдЙрд╕реА рд╕рдордп, рдЕрдиреБрдмрдВрдз рдХреЗ рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реЗ рдЕрдкрдиреЗ рд╕рднреА рд▓рд╛рднреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдЯреИрдЯрд┐рдХ рдЪреЗрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛, рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕реНрд╡рдд: рдЙрддреНрдкрд╛рджрди, рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рд╕рднреА рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ (рдиреАрдЪреЗ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ)ред рд╕рддреНрдпрд╛рдкрди рдХреА рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдЕрдиреБрдмрдВрдз рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк
рдкреБрд░рд╛рдиреА рд╢реИрд▓реА рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдкреВрд░реНрд╡ рд╢рд░реНрдд рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдкреЛрд╕реНрдЯрдХрдВрдбрд┐рд╢рди рдФрд░ рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдкреЛрд╕реНрдЯрдХрдВрдбрд┐рд╢рди рдФрд░ рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╣реА рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдпрд╣ рдЙрди рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдиреБрдмрдВрдз рдирд╣реАрдВ рд╣реИред
рдиреЛрдЯрдХреЛрдб рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЪреЗрдХ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдореЗрдВ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЖрд╢реНрд╡рд╕реНрдд рд╣реИрдВ, рддреЛ рд╡реЗ рдХреЛрдб рд╕реЗ рд╕рднреА рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдХрдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрдХреНрд░реЛрдВ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рд▓реЗрдЦ рдореЗрдВ рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд╕реНрддрд░ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рдмрдВрдзрди рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:
"рдирд┐рд╖реНрдкрд╛рджрди рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рджрд╛рд╡реЗ" ред
рдореМрдЬреВрджрд╛ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рддрд░реНрдХреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдорд╛рдирдХ рддрд░реАрдХрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рдХрдХреНрд╖рд╛рдУрдВ (рдЧрд╛рд░реНрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐
рдиреЛрдЯрдирд▓ ,
рдиреЛрдЯрдирд▓рдСрд░рдо рдЦрд╛рд▓реА , рдЖрджрд┐ред рдХреЛрдб рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдРрд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдкреВрд░реНрдг-рдЕрдиреБрдмрдВрдзреЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ: рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдПрдЯреНрд░рд┐рдмреНрдпреВрд╢рди
рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯрдЕрдЧреНрд░рд┐рдорд╡реИрд▓рд┐рдбрдПрдЯрд░рдЯреНрдпреВрдЯ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдиреЛрдЯрджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд┐рд╢реЗрд╖рддрд╛
ContractArgumentValidatorAttribute .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдВрд╕реНрдХрд░рдг 4.0 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рд╕рдВрд╕реНрдХрд░рдг 4.5 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ ContractExtensions.cs рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреЛрдб рдЕрдиреБрдмрдВрдз рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж% ProgramFiles% \ Microsoft \ Contracts \ Language \ CSharp рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
public static class Guard { [ContractArgumentValidatorAttribute] public static void IsNotNull<T>(T t) where T : class { if (t == null) throw new ArgumentNullException("t"); Contract.EndContractBlock(); } }
рдЕрдм рд╣рдо рдкреВрд░реНрд╡-
рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ
IsNotNull рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
public int Foo(string s) { Guard.IsNotNull(s); return s.Length; }
рд╡рд┐рд╖рдп рд╕реЗ рд╡рд┐рдЪрд▓рдиред Contract.ContractFailed
рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐
рдЕрдиреБрдмрдВрдз рд╡рд┐рдзрд┐ рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ
ред рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ , рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЧреИрд░-рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЙрд▓реНрд▓рдВрдШрди рд╕реЗ
рдЕрдиреБрдмрдВрдз рдЕрдкрд╡рд╛рдж рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрдиреБрдмрдВрдз рдЙрд▓реНрд▓рдВрдШрди рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдорд░рдореНрдордд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреВрд░реНрд╡ рд╢рд░реНрдд рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ (
рдЕрдиреБрдмрдВрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ + 2 рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдЬ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрд╡рд╛рдж рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд░реЛрдХрдХрд░ рдЕрдкрд╡рд╛рдж рдХреЛ "рдкрдХрдбрд╝" рд╕рдХрддрд╛ рд╣реИред
рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ
рдХрд╛рдиреНрдЯреНрд░реИрдХреНрдЯ рдлрд╝реЗрд▓реНрдб рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдкреНрд░реАрдХреЙрдиреНрдбрд┐рд╢рдиреНрд╕ / рдкреЛрд╕реНрдЯрдХрдВрдбрд┐рд╢рди / рдЗрдиреНрд╡рд░реНрдЯрд░ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХреАрдХрд░рдг рдпрд╛ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдкреВрд░реНрд╡рд╛рдиреБрднрд╡ рдЧрд┐рд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рд╣рд░рд╛ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдиреА рдЖрд╕реНрддреАрди рдКрдкрд░ рд░реЛрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рд▓рд╛рдкрд░рд╡рд╛рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдмрд╛рдХреА рдЯреАрдо рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЖрдк рд╕рднреА рдорд╢реАрдиреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдордЬрдмреВрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рдиреЗ рд╕рддреНрдпрд╛рдкрди рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдкреВрд░реНрд╡рд╡рд░реНрддреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдкреВрд░реНрд╡ рд╢рд░реНрдд рдХреЗ рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕рд╣рд┐рдд)ред