.NET 4.5 рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрд┐рдВрдм рдореЗрдВ рдирдпрд╛

.NET 4.5 рдореЗрдВ System.Reflection рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдЕрдм рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ: рдЯрд╛рдЗрдк рдФрд░ рдЯрд╛рдЗрдкрдЗрдиреНрдлреЛред TypeInfo рдСрдмреНрдЬреЗрдХреНрдЯ рдкреВрд░реА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рдпрдВ рдкреНрд░рдХрд╛рд░ рдЕрдм рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдиреЗрдЯ 4.5 рдХреЗ рддрд╣рдд рдЕрдкрдиреЗ рдбреЗрд╕реНрдХрдЯреЙрдк рдпрд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреБрд░рд╛рдиреЗ рдПрдкреАрдЖрдИ рдЕрднреА рднреА рдирдП рдкреНрд░рддрд┐рдмрд┐рдВрдм рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИред рдЖрдЬ рдореИрдВ рдирдП рдПрдкреАрдЖрдИ рдХреЗ рдХреБрдЫ рдореБрдЦреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ред

рдкреНрд░рдХрд╛рд░ рдФрд░ TypeInfo рдХрд╛ рдЕрд╡рд▓реЛрдХрди

рдЯрд╛рдЗрдк рдХреНрд▓рд╛рд╕ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░ TypeInfo, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд рд╡рд╛рд▓реЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕рдВрдмрдВрдз рд╕рд╣рд┐рдд рдПрдХ рд╡рд╕реНрддреБ рдХреА рдкреВрд░реА рдкрд░рд┐рднрд╛рд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯрд╛рдЗрдк рд╡рд░реНрдЧ рдХрд╛ рдПрдкреАрдЖрдИ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП IEnumerable рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдирд╣реАрдВ - рд╕рд░рдгрд┐рдпрд╛рдБред рдмрдбрд╝реА рдФрд░ рдЬрдЯрд┐рд▓ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ LINQ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рдЗрдк рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рднреА рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ рдРрдкреНрд╕ рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдЗрди рдирдП IEnumerable рд╕рдВрдЧреНрд░рд╣ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред

рд╡рд░реНрдЧ рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрди рдЯрд╛рдЗрдк рдХрд░реЗрдВ

рдЖрдЗрдП рдХреБрдЫ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ TypeInfo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЯрд╛рдЗрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ TypeInfo API рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдПрдБред рдЯрд╛рдЗрдк рдПрдкреАрдЖрдИ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬреИрд╕реЗ рдирд╛рдо, рдирд╛рдо рд╕реНрдерд╛рди, рдкреВрд░рд╛ рдирд╛рдо, рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрд╕реА рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ .NET 4.0 рдореЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреВрд░рд╛ рдирд╛рдо рдФрд░ рдирд╛рдо рд╕реНрдерд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

Type stringType = typeof(string); string fullName = stringType.FullName; string stringNameSpace = stringType.Namespace; 


TypeInfo API

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЯрд╛рдЗрдк рдХрдХреНрд╖рд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛ рдЧреЛрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирдП TypeInfo рд╡рд░реНрдЧ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕рдХреЗ GetTypeInfo () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЯрд╛рдЗрдк рд╕реЗ TypeInfo рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рдирд╛рдо (FirstName), рдЕрдВрддрд┐рдо рдирд╛рдо (LastName), рд╕рдВрд╢реЛрдзрд┐рдд рдШрдЯрдирд╛ рдФрд░ рд╕рд╣реЗрдЬреЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдЧреБрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

 public class Person { public string FirstName { get; set; } public string LastName { get; set; } public event EventHandler Modified; public void Save() { //    ... } } 


рдЕрдм рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рдореЗрдВ рдХреМрди рд╕реЗ рдЧреБрдг, рддрд░реАрдХреЗ рдФрд░ рдШрдЯрдирд╛рдПрдБ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред рдЗрд╕рдХреЗ DeclaredProperties, DeclaredMethods рдФрд░ DeclaredProperties рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ TypeInfo рд╕реЗ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реАрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 TypeInfo personInfo = personType.GetTypeInfo(); IEnumerable<PropertyInfo> declaredProperties = personInfo.DeclaredProperties; IEnumerable<MethodInfo> declaredMethods = personInfo.DeclaredMethods; IEnumerable<EventInfo> declaredEvents = personInfo.DeclaredEvents; 


рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдПрдХ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рднреАрддрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрджреНрдпрддрди рдХрд┐рдП рдЧрдП System.Reflection API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЕрд╕реЗрдВрдмрд▓реА рдХреНрд▓рд╛рд╕ рдЕрдм Type рд╕рд░рдгреА рдХреЗ рдмрдЬрд╛рдп TypeInfo рд╕рдВрдЧреНрд░рд╣ рд▓реМрдЯрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк TypeInfo.Assembly рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореА рдЕрд╕реЗрдВрдмрд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ DefinedTypes рдЧреБрдг рдкрдврд╝реЗрдВ:

 Assembly myAssembly = this.GetType().GetTypeInfo().Assembly; IEnumerable<TypeInfo> myTypes = myAssembly.DefinedTypes; 


рдирдП System.Reflection API рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЗрд╣рддрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдЬрд┐рд╕реЗ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИред рдФрд░ рдЬрдм рд╣рдо рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрд╕рдХрд╛ рдирд╛рдо, рдкреВрд░рд╛ рдирд╛рдо, рдЧреБрдг, рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рдШрдЯрдирд╛рдПрдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред

рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд╕реА # рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рд╕ рдЬреЛрдбрд╝реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдмрддрд╛рдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, MainPage.xaml рдЦреЛрд▓реЗрдВ рдФрд░ рдЙрд╕ XAML рдХреЛ рдЧреНрд░рд┐рдб рдХреЗ рдореВрд▓ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

рдЕрдм, рдореЗрдирдкреЗрдЬ рдХреНрд▓рд╛рд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗред рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкрд╣рд▓реЗ using System.Reflection рдХрд╛ using System.Reflection рдЬреЛрдбрд╝реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, OnNavigateTo рд╡рд┐рдзрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, OnNavigateTo рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ MyDefinedTypes рд╕реВрдЪреА рдореЗрдВ MyDefinedTypes :

 protected override void OnNavigatedTo(NavigationEventArgs e) { Assembly myAssembly = this.GetType().GetTypeInfo().Assembly; IEnumerable<TypeInfo> myTypes = myAssembly.DefinedTypes; MyDefinedTypes.DataContext = myTypes; } 


рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рд╡рд╣ MyDefinedTypes рддрддреНрд╡ рдХреЗ SelectionChanged рдИрд╡реЗрдВрдЯ рдХреЛ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдЬреЛ TypeInfoDetails рдкреИрдирд▓ рдореЗрдВ рдЪрдпрдирд┐рдд TypeInfo рдХреЛ TypeInfoDetails :

 private void MyDefinedTypes_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.AddedItems.Count > 0) { TypeInfo selectedTypeInfo = e.AddedItems.First() as TypeInfo; TypeInfoDetails.DataContext = selectedTypeInfo; TypeInfoDetails.Visibility = Windows.UI.Xaml.Visibility.Visible; } } 


рдЕрдкрдиреЗ рдЕрдВрддрд┐рдо рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЗ MainPage рд╡рд░реНрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдмрдзрд╛рдИ! рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рдЕрдм рд░рдирдЯрд╛рдЗрдо рдкрд░ рдирд┐рдореНрди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:


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

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


All Articles