рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реНрдп рдХрд╛ рдЕрд░реНрдз-рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг

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


рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдЬрдм рдореИрдВ C ++ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореИрдВрдиреЗ рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде #define рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдПрдХ рдорд╣рд╛рди рддрдВрддреНрд░ рдЬреЛ рдЖрдкрдХреЛ рдЖрд╡реЗрд╖рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд░реЗрдЦрд╛ рдореЗрдВ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдХрдИ рдмрд╛рд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдпрд╛ рдЬреЗрдиреЗрд░рд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, C # рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ C ++ рдХреЗ рд╕рдорд╛рди #define рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡рддрдГ рдХрд╛рд░рдг рд╣реИрдВ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ, рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдФрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдореЗрдВред рд▓реЗрдХрд┐рди рдореИрдВ рддрдм рднреА рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╕рдорд╛рди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп рдХреЛрдб рдбреБрдкреНрд▓реАрдХреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред
рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ Microsoft рдХреЛрдб рдкреАрдврд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд╛рдлреА рд╕рдХреНрд░рд┐рдп рд╣реИред рдХрдо рд╕реЗ рдХрдо Linq2Sql рд╡рд░реНрдЧреЛрдВ рдХреЛ рд▓реЗрдВ - рд╡рд░реНрдЧ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рднреА рдШреЛрд╖рдгрд╛рдПрдВ xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдкреВрд░рд╛ System.CodeDom рдирд╛рдо рд╕реНрдерд╛рди рдХреЛрдб рдкреАрдврд╝реА рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИред рдХрдИ рддрд░реАрдХреЗ рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рдЖрдкрдХреЛ рд╕реАрдПрд▓рдЖрд░ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ .NET - C #, VB.Net рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

/// <summary> ///   - /// </summary> /// <param name="newC"></param> /// <param name="e"></param> private void CreateProperty(CodeTypeDeclaration newC, XmlElement e) { string propName = e.GetAttribute("name"); var propType = ResolveType(e.GetAttribute("datatype")); var rel_field_prop_name = createPropertyConstName(newC, e, propName); var new_prop = new CodeMemberProperty { Attributes = MemberAttributes.Public | MemberAttributes.Final, Name = "p_" + propName, HasGet = true, HasSet = true, Type = propType }; var comment = e.GetAttribute("displayname"); if (!string.IsNullOrEmpty(comment)) new_prop.Comments.Add(new CodeCommentStatement("<summary>\n " + comment + "\n </summary>", true)); new_prop.GetStatements.Add(new CodeMethodReturnStatement( new CodeCastExpression(propType, new CodeMethodInvokeExpression( new CodeMethodReferenceExpression(new CodeBaseReferenceExpression(), "GetDataProperty"), new CodeFieldReferenceExpression(null, rel_field_prop_name))))); new_prop.SetStatements.Add( new CodeMethodInvokeExpression( new CodeMethodReferenceExpression(new CodeBaseReferenceExpression(), "SetDataProperty"), new CodeFieldReferenceExpression(null, rel_field_prop_name), new CodePropertySetValueReferenceExpression())); newC.Members.Add(new_prop); } 


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


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

2010 рдореЗрдВ, Microsoft T4 рдЯреЗрдХреНрд╕реНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ред рдкреНрд░рд▓реЗрдЦрди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рд▓рдЧрднрдЧ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА 2008 рдХреЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓рд╛ :-(ред

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

рдореБрдЭреЗ рдХреБрдЫ рд╕рд░рд▓ рдЪрд╛рд╣рд┐рдП


рдЗрд╕рд▓рд┐рдП, рдореИрдВ рддрддреНрдкрд░рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ - рдореЗрд░реЗ рд╣рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдЬрд▓реА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЦреНрдп рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ рддреИрдпрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ:
  1. "рдХреЛрдб-рдЬрдирд░реЗрдЯрд┐рдВрдЧ" рдХреЛрдб рд╕рд░рд▓ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓рд┐рдирдХ-рд╢реИрд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  3. рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  4. рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдФрд░ рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдФрд░ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░, рддрдХрдиреАрдХреА рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
  1. рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рд░рд▓ рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдпреБрдХреНрдд рд╣реЛрддрд╛ рд╣реИ
  2. рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдЗрдХрдЯреНрдареЗ рд╣реЛрдиреЗ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рддреБрд░рдВрдд рд▓реЙрдиреНрдЪ (рдкреЛрд╕реНрдЯрдмреНрдпреВрдЗрд▓реНрдбрд╕реНрдЯреЗрдк рдореЗрдВ) рдФрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рднрд╛рдЧреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
  3. рдЙрддреНрдкрдиреНрди рдФрд░ рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЖрдВрд╢рд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред (рд╕рдВрднрд╡рддрдГ, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ C # рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рддрд╛рдХрд┐ рдпрд╣ #define feature рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдЗрддрдирд╛ рдЖрдХреНрд░рд╛рдордХ рди рд╣реЛред)
  4. рд╣рдо рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдХреЗ рд░реВрдк рдореЗрдВред рдХреНрдпреЛрдВ? рд╣рд╛рдВ, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдирд┐рдЪрд▓рд╛ рд░реЗрдЦрд╛ - рд╕рдорд╛рди рдЧреБрдгреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 //   const string CommandPropertyTemplate = @"public static <type> <name> {{ get {{ return PVCommand.<name>.GetCommand(); }} }} "; //      var commandsClass = CodeWriter .BeginSource("Commands.cs") .Using("MyApp.Display") .BeginNamespace("MyAppCommands") .AddClass("Commands").Static(); //         //   var allcmds = System.Enum.GetValues(typeof(PVCommand)).Cast<PVCommand>(); foreach (var cmd in allcmds) { commandsClass.AddBlock<RoutedUICommand>(cmd.ToString(), CommandPropertyTemplate); } 

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

рддреЛ рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?


рдЦреИрд░, рдЕрдм рдереЛрдбрд╝рд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдерд╛рдиреАрдп рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ

рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ WPF рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдерд╛рдиреАрдп рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдерд╛, рдЬрд┐рд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдкрдВрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП XAML рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА, рдПрдХрд╕рдорд╛рди рдЪрдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬрдм рдореИрдВрдиреЗ рдЕрдЧрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХреА, рддреЛ рдореИрдВрдиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рддреЛ, рдПрдХ рд╕рдВрд▓рдпрди рдЬрд┐рд╕рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИ, рдЗрдирдкреБрдЯ рдХреЛ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рддрдЯрд╕реНрде рд▓реЛрдХреЗрд▓ рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рд╡рд┐рд╡рд░рдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:
  public enum Strings { [Description("MyCoolApp - trial version")] AppTitle, } 


рдЗрд╕ рдЧрдгрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рджреЛ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ:
  1. рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде XAMLред (рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Linq2XML рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рд▓реА рдЬрд╛рддреА рд╣реИрдВ)
  2. рдХреЛрдб рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЗрдЯрд┐рдХ рдХреНрд▓рд╛рд╕ред

WPF рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдХреЛрдб рдмрдирд╛рдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 //    const string ResourceEntry = @" public const <type> <name>Key = ""<name>""; public static <type> <name> {{ get{{ return App.RString(<name>Key); }} }} "; //     var stringTable = CodeWriter .BeginSource("Strings.cs") .BeginNamespace("MyApp") .AddClass("StringTable") .Static(); //      foreach (var rstring in GetResourceStrings()) { var resourseKey = rstring.ToString(); stringTable.AddBlock<string>(resourseKey, ResourceEntry); } //   XAML void StringTableXamlTo(string dir) { var nsDefault = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"; var nsX = "http://schemas.microsoft.com/winfx/2006/xaml"; var nsCore = "clr-namespace:MyApp.Core;assembly=MyApp.Core"; var resourcedict = new XElement(XName.Get("ResourceDictionary", nsDefault), new XAttribute(XName.Get("Uid", nsX), "StringTable"), new XAttribute(XNamespace.Xmlns + "core", nsCore), new XAttribute(XNamespace.Xmlns + "x", nsX)); foreach (var rstring in GetResourceStrings()) { var resourseKey = rstring.ToString(); var resourceValue = EnumHelper.GetDescription(rstring); var resourceDecl = new XElement(XName.Get("StringObject", nsCore), new XAttribute(XName.Get("Uid", nsX), "UID_" + resourseKey), new XAttribute(XName.Get("Key", nsX), resourseKey), new XAttribute("Localization.Attributes", "Value (Readable Modifiable Text)"), new XAttribute("Value", resourceValue) ); resourcedict.Add(resourceDecl); } var xaml = new XDocument(resourcedict); xaml.Save(Path.Combine(dir, "stringtable.xaml")); } } 

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

рдбреЛрдореЗрди рдореЙрдбрд▓

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдгред рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд╕рд╛рд░ рдореЙрдбрд▓ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ INotifyPropertyChanged рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдЧреБрдг рд╣реИрдВред рдЗрди рдЧреБрдгреЛрдВ рдХреЛ рд╕рднреА рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдХреНрд╖реЗрддреНрд░ рдЬреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЧреЗрдЯреНрдЯрд░ рдмрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реЗрдЯрд░ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕реВрдЪрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдРрд╕реА рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рд▓рд┐рдЦреА рдереАред рдлрд┐рд░ рдореИрдВрдиреЗ рдПрдХ рдкреИрдЯрд░реНрди рдореЗрдВ рдХреЛрдб рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╕реАрдЦрд╛ред рдФрд░ рдЕрдм рдореИрдВ рдПрдХ рдЬрдЧрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЧреБрдгреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реВрдВред рд╣рдо рдПрдХ рдЧреБрдг рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд┐рд░ рд╕реЗ, рд╡рд░реНрдЧ рдЧреБрдгреЛрдВ рдХреА рд╕реВрдЪреА рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЧрдгрдирд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЧреБрдг рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рд╡рд░реНрдЧ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рд▓рдЧрднрдЧ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдВрддрд░ рдХреЗрд╡рд▓ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЦрд╛рдХреЗ рдореЗрдВ рд╣реЛрдЧрд╛:
 const string ModelPropertyTemplate = @" <type> _<name>; public <type> <name> {{ get {{ return _<name>; }} set {{ _<name> = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(""<name>"")); }} } "; 


рдирд┐рд╖реНрдХрд░реНрд╖


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

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдкреБрдирд╢реНрдЪ рдпрд╣рд╛рдВ рдЖрдк рдЦреБрдж рдХреЛ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles