String.Intern рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рддрд╛ рд╣реИ

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛:



рдЗрдВрдЯрд░рд╡реНрдпреВ рдкрд╛рд╕ рдХрд░рдирд╛ / рдЖрдпреЛрдЬрд┐рдд рдХрд░рдирд╛, рдПрдХ рдРрд╕реЗ рд╕рд╡рд╛рд▓ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ .NET рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдордЭ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, "рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛" рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдРрд╕реЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдкреНрдпрд╛рд░ рдХрд╛ рдЖрдирдВрдж рд▓реЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдореБрдЭрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЙрд╕рдиреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдореБрдЭреЗ рдПрдХ рдореГрдд рдЕрдВрдд рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред рд░реВрдиреЗрдЯ рдореЗрдВ рдПрдХ рдЦреЛрдЬ рдиреЗ рдХрдИ рд▓реЗрдЦ рд▓реМрдЯрд╛рдП, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдП, рдЬрд┐рдирдХреА рдореБрдЭреЗ рддрд▓рд╛рд╢ рдереАред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдВрдбреНрд░рдпреВ рд╕реНрдЯреЗрд▓рдореИрди ( "рд╣реЗрдб рдлрд░реНрд╕реНрдЯ рд╕реА #" рдХреЗ рд▓реЗрдЦрдХ) рджреНрд╡рд╛рд░рд╛ рдореЗрд░реЗ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рднрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред NET рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдЬреЛ рд▓реЛрдЧ .NET рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред



String.Intern рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рддрд╛ рд╣реИ



рд╣рд░ рд╕реА # рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрд╛рд╕ рдЖрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ "рд╣реЗрдб рдлрд░реНрд╕реНрдЯ рд╕реА #" рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рд▓рдЧрднрдЧ рд╣рд░ рджреВрд╕рд░реЗ рд╕реА # рдмреБрдХ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕реА # рдЬреВрдирд┐рдпрд░ рдФрд░ рдордзреНрдпрдо рд╕реНрддрд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рд╛рдЗрди-рдмрд╛рдп-рд▓рд╛рдЗрди рдмреЗрд╕ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд░реЗрдЦрд╛рдПрдВ рдЬрд┐рддрдиреА рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддреА рд╣реИрдВ, рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред C # рдФрд░ .NET рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ String.Internate рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, C # рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдмрдирд╛ рджреЗрдЧрд╛ред



рдиреЛрдЯ: рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ, ILDasm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рдХреБрдЫ рджрд┐рдЦрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ ILDasm рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА .NET рдЯреВрд▓ рдХреЛ рдЬрд╛рдирдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд╕рд░ рд╣реЛрдЧрд╛ред



рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреБрдЫ рдореВрд▓ рдмрд╛рддреЗрдВ


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



Visual Studio рдореЗрдВ рдПрдХ рдирдпрд╛ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдБред (рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП csc.exe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рд╕рдм рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдордЧреНрд░реА рдХреА рдзрд╛рд░рдгрд╛ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рдЪрд┐рдкрдХреЗ рд░рд╣рддреЗ рд╣реИрдВред) рдпрд╣рд╛рдБ рдореБрдЦреНрдп () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ - рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ:



Program.cs:



using System; class Program { static void Main(string[] args) { string a = "hello world"; string b = a; a = "hello"; Console.WriteLine("{0}, {1}", a, b); Console.WriteLine(a == b); Console.WriteLine(object.ReferenceEquals(a, b)); } }
      
      





рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрдВрд╕реЛрд▓ рдХреЛ рддреАрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдпрд╛рдж рд░рдЦреЗрдВ, рдпрджрд┐ рдЖрдк рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдбрд┐рдмрдЧрд░ рдХреЗ рдмрд╛рд╣рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП Ctrl-F5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ; рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП "рдХрд┐рд╕реА рднреА рдХреБрдВрдЬреА рджрдмрд╛рдПрдВ ..." рдХреЛ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛):



рд╣реИрд▓реЛ, рд╣реИрд▓реЛ рджреБрдирд┐рдпрд╛

рдЭреВрдард╛

рдЭреВрдард╛



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

рдлрд┐рд░ рдЗрди рджреЛрдиреЛрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдореБрдЦреНрдп () рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:



  Console.WriteLine((a + " world") == b); Console.WriteLine(object.ReferenceEquals((a + " world"), b));
      
      





рдФрд░ рдлрд┐рд░, рдЖрдкрдХреЛ рдПрдХ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдЬрд╡рд╛рдм рдорд┐рд▓рддрд╛ рд╣реИред рдЗрдХреНрд╡рд┐рдЯреА рдСрдкрд░реЗрдЯрд░ рд╕рд╣реА рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕рдорд╛рди рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдкрдиреЗ "рд╣реЗрд▓реЛ" рдФрд░ "рд╡рд░реНрд▓реНрдб" рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдХреЙрдиреНрд╕реЗрдкреНрдЯреЗрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рддреЛ + рдСрдкрд░реЗрдЯрд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрдиреНрдЯреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ System.String рдХрд╛ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯред рд╕рдВрджрд░реНрдн () рдХрд╛рдлреА рдпрдереЛрдЪрд┐рдд рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИред ReferenceEquals () рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рддрднреА рд╕рд╣реА рд╣реЛрддреА рд╣реИ рдЬрдм рджреЛрдиреЛрдВ рддрд░реНрдХ рдПрдХ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

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



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

рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рд╣рдо рд▓рд╛рдЗрди рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдЕрдЬреАрдм рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред



рдЗрд╕ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЧрд▓рдд рд╣реИ ...


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



Program.cs:



 using System; class Program { static void Main(string[] args) { string hello = "hello"; string helloWorld = "hello world"; string helloWorld2 = hello + " world"; Console.WriteLine("{0}, {1}: {2}, {3}", helloWorld, helloWorld2, helloWorld == helloWorld2, object.ReferenceEquals(helloWorld, helloWorld2)); } }
      
      





рдЕрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдПрдВред рдпрд╣рд╛рдБ рдпрд╣ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:



рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб, рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб: рдЯреНрд░реВ, рдлрд╛рд▓реНрд╕



рдФрд░ рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдордиреЗ рдЙрдореНрдореАрдж рдХреА рдереАред HelloWorld рдФрд░ helloWorld2 рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╕рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓рд┐рдВрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдм рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:



  helloWorld2 = "hello world"; Console.WriteLine("{0}, {1}: {2}, {3}", helloWorld, helloWorld2, helloWorld == helloWorld2, object.ReferenceEquals(helloWorld, helloWorld2));
      
      





рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред рдЗрд╕ рдмрд╛рд░, рдХреЛрдб рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:



рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб, рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб: рдЯреНрд░реВ, рдЯреНрд░реВ



рд░реБрдХреЛ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдм HelloWorld рдФрд░ HelloWorld2 рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ? рд╢рд╛рдпрдж рдХреБрдЫ рдХреЛ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдЬреАрдм рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдереЛрдбрд╝рд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд╣рдордиреЗ helloWorld2 рдХрд╛ рдорд╛рди рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдмрджрд▓рд╛ред рдХрдИ рдЕрдВрдд рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЛрдЪрддреЗ рд╣реИрдВ: тАЬрдЪрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрд▓реЛ рджреБрдирд┐рдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдерд╛ред рдЗрд╕реЗ рд╣реИрд▓реЛ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдПрдХ рдмрд╛рд░ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред



рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИредрдмрд╛рд╣рд░? (рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдореЗрдВ рдбреВрдмрддреЗ рд╣реБрдП ...)


рд╕реА # рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕реАрдПрд▓рдЖрд░ рдХреБрдЫ рдореБрд╢реНрдХрд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рд▓рд╛рдЦ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЪрд░ рдореЗрдВ рд╕реМ рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдорд╛рди рдорд╛рди рдпрд╣ рдирд┐рдХрд▓реЗрдЧрд╛ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рд╕реАрдПрд▓рдЖрд░ рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдирд╛рдордХ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд▓рд┐рдВрдХ рд╣реИ рдЬрд┐рд╕реЗ рдпрд╛ рддреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдкреВрд▓ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЙрдкрдпреЛрдЧреА рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: String.Intern () рдФрд░ String.IsInterned () ред



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



  Console.WriteLine(object.ReferenceEquals( String.Intern(helloWorld), String.Intern(helloWorld2)));
      
      





рдпрд╣ рдХреЛрдб рддрдм рднреА рд╕рд╣реА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛, рдЬрдм HelloWorld рдФрд░ HelloWorld2 рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рджреЛрдиреЛрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ "Hello World" рд╣реИрдВред

рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рд░реБрдХрд┐рдПред рдпрд╣ String.Intern () рдХреЗ рд╕рд╛рде рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рд╕рдордЭ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрднреА-рдХрднреА рдпрд╣ рд╡рд┐рдзрд┐ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрддрд╛рд░реНрдХрд┐рдХ рдкрд░рд┐рдгрд╛рдо рджреЗрддреА рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:



  string a = new string(new char[] {'a', 'b', 'c'}); object o = String.Copy(a); Console.WriteLine(object.ReferenceEquals(o, a)); String.Intern(o.ToString()); Console.WriteLine(object.ReferenceEquals(o, String.Intern(a)));
      
      





рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХрдВрд╕реЛрд▓ рдХреЛ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рдкреНрд░рд┐рдВрдЯ рд╣реЛрдВрдЧреАред рдкрд╣рд▓реА рд░рд╛рдЗрдЯрд▓рд╛рдЗрди () рд╡рд┐рдзрд┐ рдЧрд▓рдд рджрд┐рдЦрд╛рдПрдЧреА, рдФрд░ рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдХреЛрдкреА () рд╡рд┐рдзрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдПрдХ рдирдИ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдХреНрдпреЛрдВ String.Intern (about.ToString ()) рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдлрд┐рд░ String.Intern (a) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛? рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рд░реБрдХреЗрдВред рдпрджрд┐ рдЖрдк рддреАрди рдФрд░ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:



  object o2 = String.Copy(a); String.Intern(o2.ToString()); Console.WriteLine(object.ReferenceEquals(o2, String.Intern(a)));
      
      





рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреА рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдиреЗ рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛, рдХреЗрд╡рд▓ рдирдП рдУ 2 рдСрдмреНрдЬреЗрдХреНрдЯ рдЪрд░ рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди рдЖрдЦрд┐рд░реА рдореЗрдВ, WriteLine () рдЭреВрдареА рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред рддреЛ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ?



рдпрд╣ рдереЛрдбрд╝рд╛ рдЧрдбрд╝рдмрдбрд╝ рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рд╕реНрдЯрд░реНрди () рдФрд░ рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ред рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рдордЭрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ ToString () рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рджреЗрддреА рд╣реИред рд╡реИрд░рд┐рдПрдмрд▓ рдУ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ "рдПрдмреАрд╕реА" рдХрд╛ рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЯреЛрд╕реНрдЯреНрд░рд┐рдВрдЧ () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд▓рд┐рдВрдХ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд▓рд╛рдЗрди рдирдВрдмрд░ 1 рдХреА рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рдЕрдВрдХ, рдЬрд┐рд╕рдореЗрдВ "рдПрдмреАрд╕реА" рд╢рд╛рдорд┐рд▓ рд╣реИред рдЪрд░ o рд▓рд╛рдЗрди рдирдВрдмрд░ 2 рдХреА рдПрдХ рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ "рдПрдмреАрд╕реА" рднреА рд╣реЛрддрд╛ рд╣реИред String.Intern (o.ToString ()) рдХреЙрд▓рд┐рдВрдЧ рд▓рд╛рдЗрди рдирдВрдмрд░ 2 рдХрд╛ рд╕рдВрджрд░реНрдн рдЖрдВрддрд░рд┐рдХ рдкреВрд▓ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдм, рдЬрдм рд▓рд╛рдЗрди рдирдВрдмрд░ 2 рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдореЗрдВ рд╣реИ, рддреЛ рдХрд┐рд╕реА рднреА рд╕рдордп String.Intern () рдкреИрд░рд╛рдореАрдЯрд░ "abc" рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ 2 рдХреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдЬрдм рдЖрдк рдЪрд░ o рдФрд░ String.Intern (a) рд╕реЗ ReferenceEquals () рд╡рд┐рдзрд┐ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ True рд▓реМрдЯрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ String.Intern (a) рдиреЗ рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ 2 рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рджрд┐рдпрд╛ред рдЕрдм рд╣рдордиреЗ рдПрдХ рдирдпрд╛ рд╡реИрд░рд┐рдПрдмрд▓ O2 рдмрдирд╛рдпрд╛ рдФрд░ рдПрдХ рдФрд░ String рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП String.Copy () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣ рд▓рд╛рдЗрди рдирдВрдмрд░ 3 рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдПрдмреАрд╕реА" рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред String.Intern (o2.ToString ()) рдХреЙрд▓рд┐рдВрдЧ рдЗрд╕ рдмрд╛рд░ рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ "abc" рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд╛рдЗрди 2 рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рдПрдЧрд╛ред

рддреЛ рдпрд╣ рдХреЙрд▓ рдЗрдВрдЯрд░реНрди () рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░ 2 рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдПрдХ рдЪрд░ рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рд╣рдо рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: string q = String.Intern (o2.ToString ()) , рдЬреЛ q рдЪрд░ рдХреЛ рдкрдВрдХреНрддрд┐ # 2 рдХреА рд╡рд╕реНрддреБ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛ рджреЗрдЧрд╛ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рд▓рд┐рд╕реНрдЯрд▓рд╛рдЗрди () рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЧрд▓рдд рдмрдирд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рд╛рдЗрди рдирдВрдмрд░ 3 рдХреЗ рд▓рд┐рдВрдХ рдХреА рддреБрд▓рдирд╛ рд▓рд╛рдЗрди рдирдВрдмрд░ 2 рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд╣реИред



String.IsInterned () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреЛрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрди рдкреВрд▓ рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ


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

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

рдЬрдм IsInterned () рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд▓-рд╕рд╣-рд╕рдВрдЪрд╛рд▓рдХ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ - ?? рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИред ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЗрдЦрди:



  string o = String.IsInterned(str) ?? "not interned";
      
      





рдЕрдм IsInterned () рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЪрд░ o рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдпрд╣ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдЗрдВрдЯрд░реНрди рдирд╣реАрдВ рд╣реИ" рдпрджрд┐ рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдореЗрдВ рдХреЛрдИ рд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Console.WriteLine () рд╡рд┐рдзрд┐ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧреА (рдЬреЛ рдХрд┐ рд╢реВрдиреНрдп рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╡рд┐рдзрд┐ рдХрд░рддреА рд╣реИ )ред

рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ String.IsInterned () рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:



  string s = new string(new char[] {'x', 'y', 'z'}); Console.WriteLine(String.IsInterned(s) ?? "not interned"); String.Intern(s); Console.WriteLine(String.IsInterned(s) ?? "not interned"); Console.WriteLine(object.ReferenceEquals( String.IsInterned(new string(new char[] { 'x', 'y', 'z' })), s));
      
      





рдкрд╣рд▓рд╛ WriteLine () рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрдВрд╕реЛрд▓ рдореЗрдВ "рдЗрдВрдЯрд░реНрди рдирд╣реАрдВ" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ "xyz" рдЕрднреА рддрдХ рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░рд╛ рд░рд╛рдЗрдЯрд▓рд╛рдЗрди () рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ "xyz" рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "xyz" рд╣реЛрддрд╛ рд╣реИред рдФрд░ рддреАрд╕рд░рд╛ WriteLine () True рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ s рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред



рд╕рд╛рд╣рд┐рддреНрдп рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╕рд╣рдЬ рд╣реИ


рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рдХрд░ рдФрд░ рдлрд┐рд░ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдПрдВ:



  onsole.WriteLine(object.ReferenceEquals("xyz", ));
      
      





рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдХреБрдЫ рд╣реЛрдЧрд╛!

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ "рдЗрдВрдЯрд░реНрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛" рдФрд░ рдЕрдВрддрд┐рдо рджреЛ рд▓рд┐рдЯрд▓рд▓рд╛рдЗрди () рд╡рд┐рдзрд┐рдпрд╛рдБ рдЧрд▓рдд рджрд┐рдЦрд╛рдПрдВрдЧреА ! рдпрджрд┐ рд╣рдо рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдкреЗрдХреНрд╖рд┐рдд рдереЗред рдХреНрдпреЛрдВ! рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЙрд╕рдХреЗ рдКрдкрд░ рдХреЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреИрд╕реЗ рдмрджрд▓ рдЧрдпрд╛? рдпрд╣ рдмрд╣реБрдд, рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ!



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

рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ "xyz" рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛрдб рдореЗрдВ рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдРрд╕рд╛ рдмрджрд▓рд╛рд╡ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред String.IsInterned (s) рдЕрдм рд░рд┐рдХреНрдд рдирд╣реАрдВ рд╣реИ ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рд╢рд╛рдмреНрджрд┐рдХ "xyz" рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рднреА рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ ReferenceEquals () рдЧрд▓рдд рдХреНрдпреЛрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрд╕ рдХреЛ рдХрднреА рднреА рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ ("xyz" рдкреВрд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ)ред



рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдорд╛рд░реНрдЯ рд╣реИ!


рдХреЛрдб рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХреЛ рдЗрд╕рдореЗрдВ рдмрджрд▓реЗрдВ:



  Console.WriteLine( object.ReferenceEquals("x" + "y" + "z", s));
      
      





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

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рддрдм рд╣реЛрдЧрд╛ рдЬрдм рдЖрдк "x" + "y" + "z" рдХреЛ String.Format ("{0} {1} {2}", 'x', 'y', 'z') рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗред рдХреЛрдб рдХреА рджреЛрдиреЛрдВ рдкрдВрдХреНрддрд┐рдпрд╛рдБ "xyz" рд▓реМрдЯрд╛рддреА рд╣реИрдВред рдлрд┐рд░, + рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рд╣рдорддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЖрдк рд╢рд╛рдмреНрджрд┐рдХ "xyz" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрд╕реА рд╕рдордп String.Format () рдХреЛ рд░рди рдЯрд╛рдЗрдо рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб "x" + "y" + "z" рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИред



Program.cs:



 using System; class Program { public static void Main() { Console.WriteLine("x" + "y" + "z"); } }
      
      





рдЕрдЧрд▓рд╛ рдХрджрдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдиреЗ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрд╡реЗрджрди рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдо ILDasm.exe, MSIL disassembler рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдЯреВрд▓ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ (рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╣рд┐рдд) рдХреЗ рд╣рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЖрдИрдПрд▓ рдкрдврд╝рдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред



Ildasm.exe рдЪрд▓рд╛рдПрдБред рдпрджрд┐ рдЖрдк Windows рдХреЗ 64-рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ: "% ProgramFiles (x86)% \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ Ildasm.exe" (рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рд╕рд╣рд┐рдд), рдкреНрд░рд╛рд░рдВрдн >> рд░рди рд╡рд┐рдВрдбреЛ рд╕реЗ , рдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗред рдпрджрд┐ рдЖрдк Windows рдХреЗ 32-рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: "% ProgramFiles% \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ ildasm.exe" ред



рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ 3.5 рдпрд╛ рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рд╣реИ
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ 3.5 рдпрд╛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрдбрд╝реЛрд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ ildasm.exe рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛ред рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рд╡рд┐рдВрдбреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╛рдЗрд▓реНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо "Microsoft SDKs \ Windows \ vX.X \ bin" рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк "рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ" рд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рд╕реНрдЯрд╛рд░реНрдЯ рдореЗрдиреВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "ILDASM" рдЯрд╛рдЗрдк рдХрд░реЗрдВред




рдпрд╣ ILDasm рдкрд╣рд▓реЗ рд░рди рдкрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:







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







(рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдмреНрд░рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ C # рдФрд░ .NET рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреА рд╕рдордЭ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ)ред

рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдореБрдЦреНрдп () рд╡рд┐рдзрд┐ рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЗрди рдЪрд░рдгреЛрдВ рдХреЗ рдмрд╛рдж, рдПрдХ рдЕрд╕реНрд╡реАрдХреГрдд рд╡рд┐рдзрд┐ рдХреЛрдб рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:







рдХреЛрдб рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ "xyz" рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ IL рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк ILDasm рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ "x" + "y" + "z" рдХреЗ рдмрдЬрд╛рдп "xyz" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ IL рдХреЛрдб рдкрд╛рд░реНрд╕ рд╣реЛрддрд╛ рд╣реИ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ! рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ "xyz" рдХреЗ рд╕рд╛рде "x" + "y" + "z" рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛рдлреА рд╕реНрдорд╛рд░реНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдЪрд╛рд▓рди рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ "xyz" рд╣рдореЗрд╢рд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реАрдПрд▓рдЖрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдкреВрд▓ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред



рдЗрд╕ рд▓реЗрдЦ рдХреА рд╕рд╛рдордЧреНрд░реА рдЖрдкрдХреЛ C # рдФрд░ .NET рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рд╕реАрдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ MSDN рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдЪрд╛рд░ рдЕрдиреБрднрд╛рдЧред рдЗрдиреНрдЯрд░рдиреЗрдЯ рдкреЗрдЬ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЖрдзрд╛рд░ рд╣реИ ред



рдкреБрдирд╢реНрдЪ: рдЕрдиреБрд╡рд╛рдж рдХреА рдЙрдирдХреА рдХрдард┐рди рдкреНрд░реВрдлрд░реАрдбрд┐рдВрдЧ рдФрд░ рд╡рд╕реНрддреБрдирд┐рд╖реНрда рдЖрд▓реЛрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЯреАрдо рдХреЛ рдзрдиреНрдпрд╡рд╛рджред



All Articles