Mono.Cecil: рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ "рдХрдВрдкрд╛рдЗрд▓рд░" рдмрдирд╛рдПрдВ

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

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

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




рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдХрдВрд╕реЛрд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдирдорд╕реНрдХрд╛рд░,% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:

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

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

рдмрд╛рддрдЪреАрдд рдХрд╛ рд╡рд┐рд╖рдп


рдпрд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рддреИрдпрд╛рд░ рдХреЛрдб (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрдирд░реЗрдЯрд░ рд╡рд┐рдзрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╡рд░реНрдЧ, рд░реВрдк, рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛):

using Mono.Cecil; using Mono.Cecil.Cil; public void Compile(string str) { //      ,   :   var name = new AssemblyNameDefinition("SuperGreeterBinary", new Version(1, 0, 0, 0)); var asm = AssemblyDefinition.CreateAssembly(name, "greeter.exe", ModuleKind.Console); //     string  void asm.MainModule.Import(typeof(String)); var void_import = asm.MainModule.Import(typeof(void)); //   Main, , ,  void var method = new MethodDefinition("Main", MethodAttributes.Static | MethodAttributes.Private | MethodAttributes.HideBySig, void_import); //       var ip = method.Body.GetILProcessor(); //  ! ip.Emit(OpCodes.Ldstr, "Hello, "); ip.Emit(OpCodes.Ldstr, str); ip.Emit(OpCodes.Call, asm.MainModule.Import(typeof(String).GetMethod("Concat", new Type[] { typeof(string), typeof(string) }))); ip.Emit(OpCodes.Call, asm.MainModule.Import(typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }))); ip.Emit(OpCodes.Call, asm.MainModule.Import(typeof(Console).GetMethod("ReadLine", new Type[] { }))); ip.Emit(OpCodes.Pop); ip.Emit(OpCodes.Ret); //  ,      :    //      var type = new TypeDefinition("supergreeter", "Program", TypeAttributes.AutoClass | TypeAttributes.Public | TypeAttributes.AnsiClass | TypeAttributes.BeforeFieldInit, asm.MainModule.Import(typeof(object))); //     asm.MainModule.Types.Add(type); //     type.Methods.Add(method); //       asm.EntryPoint = method; //     asm.Write("greeter.exe"); } 


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

рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ?


C # рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛, рдПрдХ рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ (рдореИрдВ рдХрдХреНрд╖рд╛ рд╡рд┐рд╡рд░рдг рдХреЛ рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛):

 static public void Main() { Console.WriteLine("Hello, " + "username"); Console.ReadLine(); } 


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рд▓рд╛рдЗрдиреЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдкрд╣рд▓рд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╣реИ, рджреВрд╕рд░рд╛ рд╕рдВрдХрд▓рди рдЪрд░рдг рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ рднреА рдмрди рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреИрдХ рдкрд░ рд░рдЦ рджреЗрддреЗ рд╣реИрдВред String.Concat рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдвреЗрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ Console.WriteLine рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

Bytecode рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


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

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

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

рдкреАрдУрдкреА рд╕реНрдЯреИрдХ рд╕реЗ рд╢реАрд░реНрд╖ рдЖрдЗрдЯрдо рдХреЛ рдкреЙрдк рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВред рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Console.ReadLine () рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рд╢реВрдиреНрдп рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд░реАрдЯ - рд╢рдмреНрдж рд╡рд╛рдкрд╕реА рд╕реЗ, рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╢рд╛рдпрдж рдПрдХ рдирд╣реАрдВ - рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рддрдиреЗ рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБ рд╣реИрдВред

рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо



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

рд╣рдо рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЙрдпрд▓рд╛!

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


All Articles