.NET рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛рдПрдБ

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

рддреЛ, рдЪрд▓реЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рддрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


BNET рддрд╛рд░ BSTR (рдмреЗрд╕рд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдмрд╛рдЗрдирд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдирд┐рдпрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рдЗрд╕ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ COM (VisualBasic рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╕реЗ рдореВрд▓ рд╢рдмреНрдж рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ C / C ++ рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, PWSZ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рд▓реЗрдХрд░ рд╡рд╛рдЗрдб-рдХреИрд░реЗрдХреНрдЯрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЬреАрд░реЛ-рдЯрд░реНрдорд┐рдиреЗрдЯреЗрдб рдХреЗ рд▓рд┐рдП рд╣реИ ред рд░реЗрдЦрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рдЗрд╕ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╢реВрдиреНрдп-рд╕рдорд╛рдкреНрдд рдЪрд░рд┐рддреНрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред PWSZ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗрд╡рд▓ рдореБрдлреНрдд рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рддрдХ рд╕реАрдорд┐рдд рд╣реИред

BSTR рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред

рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ BSTR рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

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

рддреЛ, .NET рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ BSTR рдирд┐рдпрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореЗрдореЛрд░реА рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрдлрд░ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЪрд╛рд░-рдмрд╛рдЗрдЯ рд▓рдВрдмрд╛рдИ рд╣реЛрддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж UTF-16 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдбрдмрд▓-рдмрд╛рдЗрдЯ рд╡рд░реНрдг рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рдж рджреЛ рдирд▓ рдмрд╛рдЗрдЯреНрд╕ (\ u0000) рд╣реЛрддреЗ рд╣реИрдВред

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

рдЖрдЧреЗ рдЬрд╛рдХрд░тАж

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рддрдиреА рдореЗрдореЛрд░реА рд▓реЗрддрд╛ рд╣реИ?


рдореИрдВ рдЙрди рд▓реЗрдЦреЛрдВ рд╕реЗ рдорд┐рд▓рд╛ рдЬрд╣рд╛рдБ рдпрд╣ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдЖрдХрд╛рд░ = 20 + (рд▓рдВрдмрд╛рдИ / 2) * 4 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реВрддреНрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╕рд┐рдВрдХрдмреНрд▓реЙрдХрдЗрдВрдбреЗрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдПрдХ рд╕реВрдЪрдХ рд╣реЛрддрд╛ рд╣реИред

рдкрдВрдХреНрддрд┐ рдХрд╛ рдЖрдХрд╛рд░ = 4 + 4 + ...

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдмрдлрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ - рдпрд╣ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реИ int, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ 4 рдФрд░ рдмрд╛рдЗрдЯреНрд╕ред

рдкрдВрдХреНрддрд┐ рдХрд╛ рдЖрдХрд╛рд░ = 4 + 4 + 4 + ...

рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЕрдирд╡рд╛рдВрдЯреЗрдб рдХреЛрдб (рдХреЙрдкреА рдХрд┐рдП рдмрд┐рдирд╛) рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╢реВрдиреНрдп-рд╕рдорд╛рдкреНрдд рд╡рд░реНрдг рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ 2 рдмрд╛рдЗрдЯреНрд╕, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ

рдкрдВрдХреНрддрд┐ рдХрд╛ рдЖрдХрд╛рд░ = 4 + 4 + 4 + 2 + ...

рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг UTF -16 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ 2 рдмрд╛рдЗрдЯреНрд╕ рднреА рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЖрдХрд╛рд░ = 4 + 4 + 4 + 2 + 2 * рд▓рдВрдмрд╛рдИ = 14 + 2 * рд▓рдВрдмрд╛рдИ

рд╣рдо рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВрдЧреЗ, рдФрд░ рд╣рдо рд▓рдХреНрд╖реНрдп рдкрд░ рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, CLR рдореЗрдВ рдореЗрдореЛрд░реА рдореИрдиреЗрдЬрд░ 4 рдмрд╛рдЗрдЯреНрд╕ (4, 8, 12, 16, 20, 24, ...) рдХреЗ рдЧреБрдгрдХреЛрдВ рдореЗрдВ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдХреБрд▓ рд▓рдВрдмрд╛рдИ 34 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧреА, рддреЛ 36 рдмрд╛рдЗрдЯреНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреАред рд╣рдореЗрдВ рдЕрдкрдиреЗ рдореВрд▓реНрдп рдХреЛ рдирд┐рдХрдЯрддрдо рдЪрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрдХрд╛рд░ = 4 * ((14 + 2 * рд▓рдВрдмрд╛рдИ + 3) / 4) (рд╡рд┐рднрд╛рдЬрди рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ)

рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╕реНрдпрд╛: рд╕рдВрд╕реНрдХрд░рдг 4 рд╕реЗ рдкрд╣рд▓реЗ .NET рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд░реНрдЧ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд m_arrayLength рдлрд╝реАрд▓реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░ int рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ 4 рдмрд╛рдЗрдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рдлрд╝реАрд▓реНрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдмрдлрд░ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рдВрдмрд╛рдИ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрд╢рдХреНрдд рд╡рд░реНрдг, рдЕрд░реНрдерд╛рддреН, рд▓рдВрдмрд╛рдИ + 1. рд╣реИред .NET 4.0 рдореЗрдВ, рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рд╡рд░реНрдЧ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ 4 рдмрд╛рдЗрдЯреНрд╕ рдХрдо рд▓реЗрддрд╛ рд╣реИред

M_arrayLength рдлрд╝реАрд▓реНрдб (рдпрд╛рдиреА .NET 4.0 рдФрд░ рдЙрдЪреНрдЪрддрд░) рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЦрд╛рд▓реА рд░реЗрдЦрд╛ рдХрд╛ рдЖрдХрд╛рд░ = 4 + 4 + 4 + 2 = 14 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, рдФрд░ рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде (рдпрд╛рдиреА, .NET 4.0 рд╕реЗ рдиреАрдЪреЗ) рдпрд╣ = 4 + 4 + 4 + 4 рд╣реИред + 2 = 18 рдмрд╛рдЗрдЯреНрд╕ред рдпрджрд┐ рдЖрдк 4 рдмрд╛рдЗрдЯреНрд╕ рдЧреЛрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрд░рдорд╢рдГ 16 рдФрд░ 20 рдмрд╛рдЗрдЯреНрд╕ред

рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛рдПрдБ


рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЬрд╛рдВрдЪ рдХреА рдХрд┐ рддрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХрд┐рддрдирд╛ рдХрдмреНрдЬрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЙрдирдХреЗ рдлреАрдЪрд░реНрд╕ рдХреАред

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

рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ - рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░


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

рд▓рд╛рдЗрдиреЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ


рд▓рд╛рдЗрдиреЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рдпрд╣ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ:

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

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд▓рд╛рдЗрдиреЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИрдВ, рд╡реЗ рд▓рдЧрд╛рддрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред .NET рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╣реИрдВред рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓рд┐рдВрдХ рдкрд░ рдПрд░рд┐рдХ рд▓рд┐рдкрд░реНрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ

рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд▓реЗрдВред рд╡реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ .NET рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдЧрд╛рддрд╛рд░ рднреАред рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд░реНрдЧ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

public final class String { private final char value[]; private final int offset; private final int count; private int hash; ..... } 

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

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ .NET рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рд▓реЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖реЗрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рджреГрдврд╝рддрд╛ рдХреЗ рдХрд╛рд░рдг, рдЬрд╛рд╡рд╛ рдореЗрдВ String.substring () рд╡рд┐рдзрд┐ рдХреЛ O (1) рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ .NET рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд┐рдзрд┐ O (n) рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИред

рдЬрд╛рд╡рд╛ рдореЗрдВ String.substring () рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

 public String substring(int beginIndex, int endIndex) { if (beginIndex < 0) throw new StringIndexOutOfBoundsException(beginIndex); if (endIndex > count) throw new StringIndexOutOfBoundsException(endIndex); if (beginIndex > endIndex) throw new StringIndexOutOfBoundsException(endIndex - beginIndex); return ((beginIndex == 0) && (endIndex == count)) ? this : new String(offset + beginIndex, endIndex - beginIndex, value); } public String(int offset, int count, char value[]) { this.value = value; this.offset = offset; this.count = count; } 

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

s = sssubstring (3)

рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

s = рдирдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ (sssubstring (3)),

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

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдирд┐рдХрд▓рд╛, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрджрд▓ рдЧрдпрд╛ рд╣реИред xonix рдиреЗ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рдЕрдм рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреЛрдИ рдСрдлрд╕реЗрдЯ рдФрд░ рд▓рдВрдмрд╛рдИ рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рд╣реИ, рдФрд░ рдПрдХ рдирдпрд╛ рд╣реИрд╢ 32 рдкреНрд░рдХрдЯ рд╣реБрдЖ рд╣реИ (рдПрдХ рдЕрд▓рдЧ рд╣реИрд╢рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЕрдм рд▓рдЧрд╛рддрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рдЕрдм String.substring рд╡рд┐рдзрд┐ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдмрдирд╛рдПрдЧреАред

рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ


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

 if (s1 == s2) 

рддреБрд▓рдирд╛ рдореЗрдВ

 if (s1.Equals(s2)) 

рд╡реИрд╕реЗ, рдЬрд╛рд╡рд╛ рдореЗрдВ, == рдСрдкрд░реЗрдЯрд░ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЪрд░рд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рддрд╛рд░ рдЪрд░рд┐рддреНрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ string.equals () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ


рдЦреИрд░, рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдХреЛрдб рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЙрд▓рдЯ рджреЗрддрд╛ рд╣реИред

 var s = "Strings are immutuble"; int length = s.Length; for (int i = 0; i < length / 2; i++) { var c = s[i]; s[i] = s[length - i - 1]; s[length - i - 1] = c; } 

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

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

 var s = "Strings are immutable"; int length = s.Length; unsafe { fixed (char* c = s) { for (int i = 0; i < length / 2; i++) { var temp = c[i]; c[i] = c[length - i - 1]; c[length - i - 1] = temp; } } } 

рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ, рд▓рд╛рдЗрди рдореЗрдВ рдПрд▓реНрдмрд╛рдЯреБрдореА рдпреБрдЧ sgnirtS рд╣реЛрдЧрд╛ ред
рдпрд╣ рддрдереНрдп рдХрд┐ рддрд╛рд░ рдЕрднреА рднреА рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдШрдЯрдирд╛ рд╣реИред рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдПрдХ рдРрд╕рд╛ рддрдВрддреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдорд░реВрдк рд╢рд╛рдмреНрджрд┐рдХ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред

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

 var s1 = "habrahabr"; var s2 = "habrahabr"; var s3 = "habra" + "habr"; Console.WriteLine(object.ReferenceEquals(s1, s2));//true Console.WriteLine(object.ReferenceEquals(s1, s3));//true 

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

 var s = "Strings are immutable"; int length = s.Length; unsafe { fixed (char* c = s) { for (int i = 0; i < length / 2; i++) { var temp = c[i]; c[i] = c[length - i - 1]; c[length - i - 1] = temp; } } } Console.WriteLine("Strings are immutable"); 

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

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

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

рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ .NET рдореЗрдВ рддрд╛рд░ рдЕрднреА рднреА рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред

рдпрджрд┐ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЗ рдмрд┐рдирд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдм рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рдирд╛ рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдпрд╣ рдЯреНрд░рд┐рдХ .NET рд╡рд░реНрдЬрди 2.0 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддрдм рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрд╡рд╕рд░ рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд┐рдпрд╛ред
.NET 2.0 рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд░реНрдЧ рдореЗрдВ рджреЛ рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ: SetChar , рдЬреЛ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ InternalSetCharNoBoundsCheck , рдЬреЛ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реВрдЪрдХрд╛рдВрдХ рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд░реНрдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЙрдирдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:

 internal unsafe void SetChar(int index, char value) { if ((uint)index >= (uint)this.Length) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); fixed (char* chPtr = &this.m_firstChar) chPtr[index] = value; } internal unsafe void InternalSetCharNoBoundsCheck (int index, char value) { fixed (char* chPtr = &this.m_firstChar) chPtr[index] = value; } 

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

 var s = "Strings are immutable"; int length = s.Length; var method = typeof(string).GetMethod("InternalSetCharNoBoundsCheck", BindingFlags.Instance | BindingFlags.NonPublic); for (int i = 0; i < length / 2; i++) { var temp = s[i]; method.Invoke(s, new object[] { i, s[length - i - 1] }); method.Invoke(s, new object[] { length - i - 1, temp }); } Console.WriteLine("Strings are immutable"); 

рдпрд╣ рдХреЛрдб, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдПрд▓реНрдмрд╛рдЯреБрдореА рдпреБрдЧ sgnirtS рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ред

рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╢реНрди: .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, string.Empty рдЗрдВрдЯрд░реНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 string str1 = String.Empty; StringBuilder sb = new StringBuilder().Append(String.Empty); string str2 = String.Intern(sb.ToString()); if (object.ReferenceEquals(str1, str2)) Console.WriteLine("Equal"); else Console.WriteLine("Not Equal"); 

.NET рдлреНрд░реЗрдорд╡рд░реНрдХ 1.0 рдореЗрдВ, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ 1.1, рдФрд░ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ 3.5 SP1, str1 рдФрд░ str2 рдмрд░рд╛рдмрд░ рд╣реИрдВред .NET рдлреНрд░реЗрдорд╡рд░реНрдХ 2.0 рд╕рд░реНрд╡рд┐рд╕ рдкреИрдХ 1 (SP1) рдФрд░ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ 3.0 рдореЗрдВ, str1 рдФрд░ str2 рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ string.Empty рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рд╣реИред

рдкреНрд░рджрд░реНрд╢рди рд╕реБрд╡рд┐рдзрд╛рдПрдБ


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

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рд╕рд╣рд╛рдпрдХ рд░рд╣рд╛ рд╣реИ ...

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


All Articles