
рдпрд╣ рд▓реЗрдЦ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдпреВрдЖрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреАрдбрд╝реЗ рдХреА рд╕рдореАрдХреНрд╖рд╛ рд╣реИред Avalonia UI рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо XAML- рдЖрдзрд╛рд░рд┐рдд UI рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдпрд╣ .NET рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рд╕рдмрд╕реЗ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ WPF рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓реЗрдЦрдХ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдХреБрдЫ рдмрдЧреНрд╕ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрджрдЧрд╛рд░ рдкрд╛рдПрдВрдЧреЗ, рдФрд░ рдЙрдирдХреЗ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░реЗрдВрдЧреЗред
Avalonia UI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдЕрд╡рд▓реЛрдирд┐рдпрд╛ рдпреВрдЖрдИ (рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реНрд╕рдкреЗрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛) рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдЖрдИрдУрдПрд╕ рдХрд╛ рд╕рдорд░реНрдерди рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрд╡рд▓реЛрдирд┐рдпрд╛ рдпреВрдЖрдИ рдЕрдиреНрдп рд░реИрдкрд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд░реИрдкрд░ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЬрд╝рд╛рдорд░реАрди рдлреЙрд░реНрдореНрд╕, рдЬреЛ рдЬрд╝рд╛рдорд░реАрди рд░реИрдкрд░реНрд╕ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рджреЗрд╢реА рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИред рдбреЗрдореЛ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдХрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдЖрдк рдбреЗрдмрд┐рдпрди рдХрдВрд╕реЛрд▓ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХреНрд╕рдПрдПрдордПрд▓ рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдиреНрдп рдпреВрдЖрдИ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдпреВрдЖрдИ рдЕрдзрд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рд▓реЗрдЖрдЙрдЯ рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП,
рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдпреВрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдПрд╡рд▓реЙрдирд╕реНрдЯрдбрд┐рдпреЛ (рд╕реА # рдФрд░ рд╕реА / рд╕реА ++ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЖрдИрдбреАрдИ) рдФрд░
рдХреЛрд░ 2 рдбреА (рдПрдХ 2 рдбреА рдЖрд░реЗрдЦ рд╕рдВрдкрд╛рджрдХ) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд╛рд╕рд╛рдмреА рд╡реЙрд▓реЗрдЯ (рдПрдХ рдмрд┐рдЯрдХреЙрдЗрди рд╡реЙрд▓реЗрдЯ) рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдпреВрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рдбрд╝рд╛рдИ рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрд╡рд▓реЛрдирд┐рдпрд╛ рдпреВрдЖрдИ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреА рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ рд╕реБрдЭрд╛рдП рдЧрдП рд╕реБрдзрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдирдХреА рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрд╣реБрдд рд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдмрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдФрд░ рдмрд╣реБрдд рд╕рд╕реНрддрд╛ рддрдп рдХрд░рдирд╛ рд╣реИред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3001 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'рдирд┐рдпрдВрддреНрд░рд┐рдд
Flags ' рдмрд╛рдИрдВ рдУрд░ рдФрд░ '^' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ред WindowImpl.cs 975TwitterClientMessageHandler.cs 52
private void UpdateWMStyles(Action change) { .... var style = (WindowStyles)GetWindowLong(....); .... style = style | controlledFlags ^ controlledFlags; .... }
рдХреБрдЫ рдкреНрд░рддреАрдХрд╡рд╛рдж рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЕрдкрдиреЗ рдкрд╣рд▓реЗ C # рдирд┐рджрд╛рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдпрд╛ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЬреАрдм рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рд╕рдордЭрд╛рдПрдВ:
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
1100 0011 | 1111 0000 ^ 1111 0000
рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ
1100 0011 | 0000 0000
рдЕрдирдиреНрдп рдпрд╛ ("^") рдХреА рдкреВрд░реНрд╡рд╡рд░реНрддреА рдмрд┐рдЯрд╡рд╛рдЗрдб OR ("|") рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╢рд╛рдпрдж рдЗрд╕ рдЖрджреЗрд╢ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдерд╛ред рдХреЛрд╖реНрдардХреЛрдВ рдореЗрдВ рдкрд╣рд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рдВрд▓рдЧреНрди рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
private void UpdateWMStyles(Action change) { .... style = (style | controlledFlags) ^ controlledFlags; .... }
рдЕрдЧрд▓реЗ рджреЛ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдорд╛рдирдирд╛ тАЛтАЛрд╣реЛрдЧрд╛: рдпреЗ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИрдВред рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕
рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдордЯреВ рд╡рд┐рдЬреБрдЕрд▓ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
VisualRoot рд╣рдореЗрд╢рд╛
рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдореВрд▓ рддрддреНрд╡ рд╣реИред рдореБрдЭреЗ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдЪреЗрддрд╛рд╡рдиреА рдХреА рдЬрд╛рдБрдЪ рдХрдм рд╣реБрдИ; рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдерд╛, рддрдм рд╣реА рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реБрдзрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрд░реНрдШрдЯрдирд╛ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рддрд░реНрдХ рдХреЛ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреЛрдб рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдирд╛ рд╣реИред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3080 рд╕рдВрднрд╡ рд╡рд╛рдкрд╕реА рд╡рд┐рдзрд┐ рдХреА рд╡рд╛рдкрд╕реА рдХреЗ рдмрд┐рдирд╛ред рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: TranslatePoint (...)ред VisualExtensions.cs 23
public static Point PointToClient(this IVisual visual, PixelPoint point) { var rootPoint = visual.VisualRoot.PointToClient(point); return visual.VisualRoot.TranslatePoint(rootPoint, visual).Value; }
рдпрд╣ рддрд░реАрдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣реИред рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓реЙрдкреНрдЯ рдХреЗ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдореВрд▓реНрдп рдХрд╛ рд╕рдВрджрд░реНрдн рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЖрдЗрдП рдЗрд╕ рдкрджреНрдзрддрд┐ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
public static Point? TranslatePoint(this IVisual visual, Point point, IVisual relativeTo) { var transform = visual.TransformToVisual(relativeTo); if (transform.HasValue) { return point.Transform(transform.Value); } return null; }
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣
рдЕрд╢рдХреНрдд рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЫрд╣ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: рддреАрди рдмрд╛рд░ рд▓реМрдЯреЗ рдореВрд▓реНрдп рдХреЗ рдЪреЗрдХ рдХреЗ рд╕рд╛рде, рдФрд░ рдЕрдиреНрдп рддреАрди рдмрд┐рдирд╛ рдЪреЗрдХ рдХреЗ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрднрд╛рд╡рд┐рдд рдбреАрд░реЗрдлреЗрд░реЗрдВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдПрдХ рдКрдкрд░ рд╣реИ, рдФрд░ рдпрд╣рд╛рдБ рдЕрдиреНрдп рджреЛ рд╣реИрдВ:
- V3080 рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛ ред 'рдкреА' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред VisualExtensions.cs 35
- V3080 рд╕рдВрднрд╡ рдЕрд╢рдХреНрддрддрд╛ ред 'рдХрдВрдЯреНрд░реЛрд▓рдкреЙрдЗрдВрдЯ' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╕реАрди .cs 176
рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рдЗрди рдмрдЧреЛрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЕрд░реНрдерд╛рдд
рдкреНрд╡рд╛рдЗрдВрдЯрдЯреЗрдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░
Nullable <рд╕рдВрд░рдЪрдирд╛> .HasValue рдЪреЗрдХ рдХреЛ
рдЬреЛрдбрд╝рдХрд░ :
public static Point PointToClient(this IVisual visual, PixelPoint point) { var rootPoint = visual.VisualRoot.PointToClient(point); if (rootPoint.HasValue) return visual.VisualRoot.TranslatePoint(rootPoint, visual).Value; else throw ....; }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3080 рд╕рдВрднрд╡ рд╡рд╛рдкрд╕реА рд╡рд┐рдзрд┐ рдХреА рд╡рд╛рдкрд╕реА рдХреЗ рдмрд┐рдирд╛ред рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: TransformToVisual (...)ред ViewportManager.cs 381
рдпрд╣ рдмрдЧ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ:
private void OnEffectiveViewportChanged(TransformedBounds? bounds) { .... var transform = _owner.GetVisualRoot().TransformToVisual(_owner).Value; .... }
рдпрд╣
TransformToVisual рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдб рд╣реИ:
public static Matrix? TransformToVisual(this IVisual from, IVisual to) { var common = from.FindCommonVisualAncestor(to); if (common != null) { .... } return null; }
рд╡реИрд╕реЗ,
FindCommonVisualAncestor рд╡рд┐рдзрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ
рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреА рд╣реИ:
public static IVisual FindCommonVisualAncestor(this IVisual visual, IVisual target) { Contract.Requires<ArgumentNullException>(visual != null); return ....FirstOrDefault(); }
TransformToVisual рд╡рд┐рдзрд┐ рдХреЛ рдХреЗрд╡рд▓ рд╕рд╛рдд рдЪреЗрдХ рдХреЗ рд╕рд╛рде рдиреМ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд╕реБрд░рдХреНрд╖рд┐рдд dereference рдХреЗ рд╕рд╛рде рдкрд╣рд▓рд╛ рдХреЙрд▓ рдКрдкрд░ рдПрдХ рд╣реИ, рдФрд░ рдпрд╣рд╛рдБ рджреВрд╕рд░рд╛ рд╣реИ:
V3080 рд╕рдВрднрд╡
рдЕрд╢рдХреНрддрддрд╛ ред рдирд┐рд░реАрдХреНрд╖рдг 'рдкрд░рд┐рд╡рд░реНрддрди' рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред MouseDevice.cs 80
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: рд╡реА 3022 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред рд╕рдВрднрд╡рддрдГ '&&' рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдиреИрд╡рд┐рдЧреЗрд╢рдирдбрд╛рдпрд░реЗрдХреНрд╢рди .cs 89
public static bool IsDirectional(this NavigationDirection direction) { return direction > NavigationDirection.Previous || direction <= NavigationDirection.PageDown; }
рдпрд╣ рдЬрд╛рдБрдЪ рдПрдХ рд╡рд┐рдЪрд┐рддреНрд░ рд╣реИред
рдиреЗрд╡рд┐рдЧреЗрд╢рдирдбрд╛рдпрд░реЗрдХреНрд╢рди рдПрдиреНрдпреВрдорд░реЗрд╢рди рдореЗрдВ 9 рдкреНрд░рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ,
рдкреЗрдЬрдбрд╛рдЙрди рдкреНрд░рдХрд╛рд░ рдЕрдВрддрд┐рдо рд╣реЛрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ, рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ рдирдП рджрд┐рд╢рд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ SUDDEN рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкрд╣рд▓рд╛ рдЪреЗрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реИрд╕реЗ рднреА, рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3066 'рдЪрдпрдирдЪреИрдирдбрдПрд╡реЗрдВрдЯрдПрд╡рд╛рд░реНрдЧреНрд╕' рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░: 'рд╣рдЯрд╛рдП рдЧрдП рд╣рдЯрд╛рдП рдЧрдП рдИрдореЗрд▓' рдФрд░ 'рдЬреЛрдбрд╝реЗ рдЧрдПрдЗрд╕реЗрдбрдореЗрдЯреНрд╕' рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рдд рдХреНрд░рдоред DataGridSelectedItemsCollection.cs 338
internal SelectionChangedEventArgs GetSelectionChangedEventArgs() { .... return new SelectionChangedEventArgs (DataGrid.SelectionChangedEvent, removedSelectedItems, addedSelectedItems) { Source = OwningGrid }; }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рдЧрд▓рдд рдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд░рд╣рд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдЙрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкрд░:
public SelectionChangedEventArgs(RoutedEvent routedEvent, IList addedItems, IList removedItems) : base(routedEvent) { AddedItems = addedItems; RemovedItems = removedItems; }
рдпрд╣ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ
IList рдХреЗ рджреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЧрд▓рдд рдХреНрд░рдо рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХрдХреНрд╖рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ Microsoft рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдП рдЧрдП рдирд┐рдпрдВрддреНрд░рдг рдХреЛрдб рдореЗрдВ рдПрдХ рдЧрд▓рддреА рд╣реИ рдФрд░ рдЕрд╡рд▓реЛрдирд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рддрд░реНрдХ рдЖрджреЗрд╢ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ рдпрджрд┐ рдХреЗрд╡рд▓ рдЙрд╕ рдкрд░ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЛрдб рдореЗрдВ рдмрдЧ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рддреАрди рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ:
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3066 рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рдд рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдХреНрд░рдо 'SelectionChangedEventArgs' рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░: 'рд╣рдЯрд╛' рдФрд░ 'рдЬреЛрдбрд╝рд╛' рдЧрдпрд╛ред AutoCompleteBox.cs 707
OnSelectionChanged(new SelectionChangedEventArgs(SelectionChangedEvent, removed, added));
рдпрд╣ рд╡рд╣реА рд░рдЪрдирд╛рдХрд╛рд░ рд╣реИ
SelectionChangedEventArgsредрдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрджреЗрд╢ V3066 :
- 'ItemRepeaterElementIndexChangedEventArgs' рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░: 'oldIndex' рдФрд░ 'newIndex' рдХреЛ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рдд рдХреНрд░рдоред рдЖрдЗрдЯрдореНрд╕рд░реАрдкреНрдЯрд░ .cs 532
- 'рдЕрдкрдбреЗрдЯ' рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рдд рдХреНрд░рдо: 'рдУрд▓реНрдбрдЗрдВрдбреЗрдХреНрд╕' рдФрд░ 'рдиреНрдпреВрдЗрдВрдбреЗрдХреНрд╕'ред рдЖрдЗрдЯрдореНрд╕рд░рдкреНрдЯрд░ .cs 536
рдПрдХ рдШрдЯрдирд╛ рдХреЙрд▓ рд╡рд┐рдзрд┐ рдкрд░ рджреЛ рдЪреЗрддрд╛рд╡рдиреАред
internal void OnElementIndexChanged(IControl element, int oldIndex, int newIndex) { if (ElementIndexChanged != null) { if (_elementIndexChangedArgs == null) { _elementIndexChangedArgs = new ItemsRepeaterElementIndexChangedEventArgs(element, oldIndex, newIndex); } else { _elementIndexChangedArgs.Update(element, oldIndex, newIndex); } ..... } }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рджреЗрдЦрд╛ рдХрд┐ рддрд░реНрдХ
рдУрд▓реНрдбрдЗрдВрдбреЗрдХреНрд╕ рдФрд░
рдиреНрдпреВрдЗрдВрдбреЗрдХреНрд╕ рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдо рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред
internal ItemsRepeaterElementIndexChangedEventArgs( IControl element, int newIndex, int oldIndex) { Element = element; NewIndex = newIndex; OldIndex = oldIndex; } internal void Update(IControl element, int newIndex, int oldIndex) { Element = element; NewIndex = newIndex; OldIndex = oldIndex; }
рд╢рд╛рдпрдж рдпрд╣ рдХреЛрдб рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЕрддреАрдд рдореЗрдВ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА, рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджреВрд╕рд░реЗ рдХреЛ :)
рдкрд┐рдЫрд▓реЗ рдореБрджреНрджреЗ рдХреА рддрд░рд╣, рдпрд╣ рдПрдХ рддрддреНрдХрд╛рд▓ рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдпрджрд┐ рдпрд╣ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛрд╖рдкреВрд░реНрдг рд╣реИ рддреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдмрд╛рдХреА рд╣реИред
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3004 'рддрддреНрдХрд╛рд▓реАрди' рдХрдерди 'рдФрд░' рдХрдерди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред DataGridSortDescription.cs 235
public override IOrderedEnumerable<object> ThenBy(IOrderedEnumerable<object> seq) { if (_descending) { return seq.ThenByDescending(o => GetValue(o), InternalComparer); } else { return seq.ThenByDescending(o => GetValue(o), InternalComparer); } }
рдпрд╣
рдереЗрдмреА рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрддреНрд╕реБрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
IEnumerable рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдЬреЛ
seq рддрд░реНрдХ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдореЗрдВ рддрдм
рдереЗрдмреА рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдерд╛:
public override IOrderedEnumerable<object> ThenBy(IOrderedEnumerable<object> seq) { if (_descending) { return seq.ThenByDescending(o => GetValue(o), InternalComparer); } else { return seq.ThenBy(o => GetValue(o), InternalComparer); } }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3106 рд╕рдВрднрд╛рд╡рд┐рдд рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реВрдЪрдХрд╛рдВрдХ рдореВрд▓реНрдпред 'рдЗрдВрдбреЗрдХреНрд╕' рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдорд╛рди -1 рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред рдПрдирд┐рдореЗрдЯрд░ .cs 68
protected T InterpolationHandler(double animationTime, T neutralValue) { .... if (kvCount > 2) { if (animationTime <= 0.0) { .... } else if (animationTime >= 1.0) { .... } else { int index = FindClosestBeforeKeyFrame(animationTime); firstKeyframe = _convertedKeyframes[index]; } .... } .... }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐
рд╕реВрдЪрдХрд╛рдВрдХ рдЪрд░ рдорд╛рди -1 рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдЪрд░ рдХреЛ
FindClosestBeforeKeyFrame рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
private int FindClosestBeforeKeyFrame(double time) { for (int i = 0; i < _convertedKeyframes.Count; i++) if (_convertedKeyframes[i].Cue.CueValue > time) return i - 1; throw new Exception("Index time is out of keyframe time range."); }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реВрдк рдореЗрдВ рдПрдХ рд╢рд░реНрдд рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХреЗ рдкрд┐рдЫрд▓реЗ рдорд╛рди рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдБрдЪрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕реНрдерд┐рддрд┐ рд╕рд╣реА рд╣реИ, рдФрд░ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ рдХрд┐
CueValue рдХрд╛ рдХреНрдпрд╛ рдореВрд▓реНрдп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд┐рд╡рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ 0.0 рд╕реЗ 1.0 рддрдХ рдХрд╛ рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА
рд╕рдордп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ: рдпрд╣
рдПрдиреАрдореЗрд╢рди рдЯрд╛рдЗрдорд┐рдВрдЧ рдЪрд░ рд╣реИ рдЬрд┐рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╕реЗ рдмрдбрд╝рд╛ рдФрд░ рдПрдХ рд╕реЗ рдХрдо рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛, рддреЛ рдирд┐рд╖реНрдкрд╛рджрди рдПрдХ рдЕрд▓рдЧ рд╢рд╛рдЦрд╛ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ред рдпрджрд┐ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдерд┐рддрд┐ рдПрдХ рд╕рднреНрдп рд╣рд╛рдЗрдЬреЗрдирдмрдЧ рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИред рдпрджрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдЪрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдпрд╣ рдХреБрдЫ рдЕрдиреНрдп рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЛ рд▓реВрдк рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ, рдпрджрд┐
FindClosestBeforeKeyFrame рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣
рджреВрдВрдЧрд╛ ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджреВрд╕рд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдКрдВрдЧрд╛:
private int FindClosestBeforeKeyFrame(double time) { for (int i = 1; i < _convertedKeyframes.Count; i++) if (_convertedKeyframes[i].Cue.CueValue > time) return i - 1; throw new Exception("Index time is out of keyframe time range."); }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3117 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ 'рдлреЛрди' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреЗрд╢ .cs 25
public Country(string name, string region, int population, int area, double density, double coast, double? migration, double? infantMorality, int gdp, double? literacy, double? phones, double? birth, double? death) { Name = name; Region = region; Population = population; Area = area; PopulationDensity = density; CoastLine = coast; NetMigration = migration; InfantMortality = infantMorality; GDP = gdp; LiteracyPercent = literacy; BirthRate = birth; DeathRate = death; }
рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рддреЗрд░рд╣ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЗрд╕рдХрд╛ рднреА рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддреАрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреА рдорджрдж рд╕реЗ (рдЬреЛ рдЕрдХреНрд╕рд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ)ред рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдмрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрдЧ рдореЗрдВ рддреЗрд░рд╣ рдЧреБрдг рднреА рд╣реИрдВ - рдкреНрд░рддрд┐ рддрд░реНрдХ - рд▓реЗрдХрд┐рди
рдлреЛрди рдЪрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рддрдп рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рд╕рдордЭреВрдВрдЧрд╛ред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3080 рд╕рдВрднрд╛рд╡рд┐рдд
рдЕрд╢рдХреНрддрддрд╛ ред 'TabItem' рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред TabItemContainerGenerator.cs 22
protected override IControl CreateContainer(object item) { var tabItem = (TabItem)base.CreateContainer(item); tabItem.ParentTabControl = Owner; .... }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ
CreateContainer рд╡рд┐рдзрд┐ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдорд╛рди рдХреА dereference рдХреЛ рдорд╛рдирддрд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕ рдкрджреНрдзрддрд┐ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
protected override IControl CreateContainer(object item) { var container = item as T; if (item == null) { return null; } else if (container != null) { return container; } else { .... return result; } }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкрдЪрд╛рд╕ рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА
рдЕрд╢рдХреНрдд рдХреЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрднреА рдЙрд╕ рд╢рд╛рдЦрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ред рди рддреЛ рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рдерд╛ ... рдХреЙрд▓ рдУрд╡рд░рд░рд╛рдЗрдб рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рддрд░реАрдХреЛрдВ рдХреЗ рдмреАрдЪ рдЦреЛ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдмрд╕ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреЗрдХ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛:
protected override IControl CreateContainer(object item) { var tabItem = (TabItem)base.CreateContainer(item); if(tabItem == null) return; tabItem.ParentTabControl = Owner; .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3142 рдЕрдиреБрдкрд▓рдмреНрдз рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛред DevTools.xaml.cs 91
рд╕рд╕реНрдкреЗрдВрд╕ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЛрдб рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реБрдП рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ; рдореИрдВ рдЖрдкрдХреЛ рдЕрднреА рдмрддрд╛рддрд╛ рд╣реВрдВ: рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдПрдХ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рд╡рд┐рдзрд┐ рдХреА рдПрдХ рдХреЙрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬреЛ рдмрд┐рдирд╛ рд╢рд░реНрдд рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ:
public static void Load(object obj) { throw new XamlLoadException($"No precompiled XAML found for {obj.GetType()}, make sure to specify x:Class and include your XAML file as AvaloniaResource"); }
рдкреИрдВрддреАрд╕ (!) рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдЕрдЧрдореНрдп рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдереАрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдкреВрдЫрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдЖрдк рдХреЙрд▓ рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред
Mono.Cecil рд▓рд╛рдЗрдмреНрд░реЗрд░реАред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ IL рдХреЛрдб рдореЗрдВ рдХреЙрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
рд╣рдорд╛рд░рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдпреВрдЖрдИ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХреБрдЫ рдЕрдЯрдкрдЯрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдореБрдЭреЗ рд╣реИ рдЬрд┐рд╕рдиреЗ рдпрд╣ рдирд┐рджрд╛рди рдХрд┐рдпрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдХреА рддрд░рд╣, рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдХреБрдЫ рдареАрдХ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЧреЗрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд▓рдЧрднрдЧ рдПрдХ рд╣рдЬрд╛рд░ рдЭреВрдареЗ рдкреЙрдЬрд╝рд┐рдЯрд┐рд╡ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрдВрдЬрди рдХреА рддрд░рдл рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3009 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ 'рд╕рдорд╛рди' рдХрд╛ рд╕рд╣реА рдорд╛рди рджреЗрддреА рд╣реИред DataGridRows.cs 412
internal bool ScrollSlotIntoView(int slot, bool scrolledHorizontally) { if (....) { .... if (DisplayData.FirstScrollingSlot < slot && DisplayData.LastScrollingSlot > slot) { return true; } else if (DisplayData.FirstScrollingSlot == slot && slot != -1) { .... return true; } .... } .... return true; }
рд╡рд┐рдзрд┐ рд╣рд░ рд╕рдордп
рд╕рд╣реА рд░рд╣рддреА рд╣реИ ред рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рддрдм рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдЬрдм рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрдЧ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╡рд░реНрдЧ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ Microsoft рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдЧ рд╣реИред рдпрджрд┐ рдЖрдк рдореБрдЭрд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВ, рддреЛ
DataGrid рдХрдо рд╕реЗ рдХрдо рд╕реНрдерд┐рд░ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреБрдЫ рдХреАрдбрд╝реЗ WPF рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рд╕реЗ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдЙрдзрд╛рд░ рд▓рд┐рдП рдЧрдП рдереЗ, рдФрд░ рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдпреВрдЖрдИ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХрд╛ рдЙрдирд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛: рдХреНрд░реИрд╢ рдпрд╛ рдЧреНрд▓рд┐рдЪрд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╕рдордЧреНрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдПрдХ рдмреБрд░рд╛ рдкреНрд░рднрд╛рд╡ рдЫреЛрдбрд╝рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛: рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдкреАрдЫреЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛рдПрдВ рдХреЗрд╡рд▓ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИрдВред
рд░реБрдХрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЧрдгрд┐рддреАрдп рдмрд╛рдзрд╛рдПрдВ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рд▓рдЧрднрдЧ рдбреЗрдврд╝ рд╕реМ рдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рджрд╛рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рддреЛ, рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд░реНрде рдХреЗ рдиреБрдХрд╕рд╛рди рдХреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧреЛрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рдЪреЗрддрд╛рд╡рдиреА рднреА рджреЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдХреЗ рдЯрди рдХреЗ рдмреАрдЪ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдпреВрдЖрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП! рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд░рдЦреЗрдВрдЧреЗред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреАрдбрд╝реЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмрдврд╝рддреА рд╣реИред рд╕реНрдерд┐рд░ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рд╛рде рд╕рдорд░реНрдерд┐рдд, CI \ CD рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕рдордЭрджрд╛рд░ рдЯреНрдпреВрдирд┐рдВрдЧ, рдЦрд╛рдбрд╝реА рдореЗрдВ рдмрдЧ рд░рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдк рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдХрдо рд╕рдордп рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ !