рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЙрд▓: рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВ рд╣реИ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдереИрддрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП, рдХрднреА-рдХрднреА рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЙрд▓ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдПрдХ рдРрд╕реА рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИред рдпрд╛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рд╕реЗ рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЬреЛ рдХреЗрд╡рд▓ рд░рди-рдЯрд╛рдЗрдо рдкрд░ рдЬреНрдЮрд╛рдд рд╣реЛрдЧреАред
рдпрд╣ рдХрднреА-рдХрднреА рддрдерд╛рдХрдерд┐рдд рдЯрдВрдХрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдпрджрд┐ рдХреЛрдИ рдмрддрдЦ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдмрддрдЦ рдХреА рддрд░рд╣ рддреИрд░рддрд╛ рд╣реИ рдФрд░ рдмрддрдЦ рдХреА рддрд░рд╣ рдЭрдкрдЯрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдПрдХ рдмрддрдЦ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ Microsoft .NET 4.0 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдореБрдЦреНрдп рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░реВрдВрдЧрд╛ред
рдореБрдЦреНрдп рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рджреВрдВрдЧрд╛ рдЬрд┐рдирдХрд╛ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдВрдЧрд╛ред рдпрджрд┐ рдХреЛрдИ рднреА рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрдмрд╛рдз рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВред рдФрд░ рдЕрдЧрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд▓рд┐рдЦреЗрдВ, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдкрд╛рда рдореЗрдВ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ред
рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд┐рди рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд╕реНрдкрд░ рд╡рд┐рдирд┐рдордп рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВ: рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдФрд░ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИред рдореИрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рддрд░реАрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ / рдЖрд╣реНрд╡рд╛рди рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдХреЛ рдЪреБрдирдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
рддреЛ:
- рдкрд░рд╛рд╡рд░реНрддрди (рдкрд░рд╛рд╡рд░реНрддрди, рдЖрд░рдЯреАрдЯреАрдЖрдИ, рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг)
- рдЕрд░реНрде рдХрд╛ рд╢рдмреНрджрдХреЛрд╢
- рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╢рдмреНрджрдХреЛрд╢
- рдПрдХ рд╕реНрдерд┐рд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБ
- рд╡рд┐рд╕реНрддрд╛рд░рдХ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБ
- рдХреЙрд▓ рдкрд┐рдХ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБ
- рднрд╛рд╡реЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди (рднрд╛рд╡)
рдкрд░реАрдХреНрд╖рдг рдкрджреНрдзрддрд┐
рдЗрд╕рд▓рд┐рдП, рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЗрддреЛрдВ / рд╡рд┐рдзрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИ:
- рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрдВрдЯреЗрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯ (рдСрдмреНрдЬреЗрдХреНрдЯрдЯреЗрд╕реНрдЯрд░) рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреА рдЧрдИ рд╡рд╕реНрддреБ рд╢рд╛рдорд┐рд▓ рд╣реИ
- рдкрд░реАрдХреНрд╖рдг рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рджреЛ рдЧреБрдг рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП - рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ (A) рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ (B)
- рдЯреЗрд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреЗрд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ A рдФрд░ B рдХреЙрд▓ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ
- рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг 2000 рдХрдВрдЯреЗрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рднрд░рддрд╛ рд╣реИ
- рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдПрд░реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдкрд░ 2000 рдмрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ
- рдкрд░реАрдХреНрд╖рдг рдСрдкрд░реЗрд╢рди рдХреЛ рдЧреБрдгреЛрдВ рдП рдФрд░ рдмреА рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдХрдо рд╕реЗ рдХрдо рджреЛ рдЧреБрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХреИрд╢ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рд░)
- рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг 5 рдмрд╛рд░ рдЪрд▓рддрд╛ рд╣реИ
рдХреЛрдб рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рддрд╣рдд рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рдВрдбреЛрдЬ 7 x64, .NET 4.0.30319, рдЗрдВрдЯреЗрд▓ рдХреЛрд░ 2 рдХреНрд╡рд╛рдб Q9400 (2666 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ), 4 рдЬреАрдмреА D22 рдкрд░ рдЯреЗрд╕реНрдЯ рдЪрд▓рддреЗ рд╣реИрдВ
рд╕реНрдереИрддрд┐рдХ (рдЧреИрд░-рдЧрддрд┐рд╢реАрд▓) рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯрдЯреЗрд╕реНрдЯрд░ рдХреЛ рдПрдХ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рдСрдЯреЛ-рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреИрд░-рдЧрддрд┐рд╢реАрд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗред
рдХреЛрдб рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ (рд╡реИрд╕реЗ, рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ, рд╣рдо рдЗрд╕реЗ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ):
private class StaticObject
{
public int A { get ; set ; }
public string B { get ; set ; }
}
private class StaticObjectTester : ObjectTester
{
private readonly StaticObject _o = new StaticObject();
public override int A
{
get { return _o.A; }
set { _o.A = value ; }
}
public override string B
{
get { return _o.B; }
set { _o.B = value ; }
}
}
* This source code was highlighted with Source Code Highlighter .
private class StaticObject
{
public int A { get ; set ; }
public string B { get ; set ; }
}
private class StaticObjectTester : ObjectTester
{
private readonly StaticObject _o = new StaticObject();
public override int A
{
get { return _o.A; }
set { _o.A = value ; }
}
public override string B
{
get { return _o.B; }
set { _o.B = value ; }
}
}
* This source code was highlighted with Source Code Highlighter .
рдкрд░рд┐рдгрд╛рдо: 00: 00: 06.6274538 (+ 0.00%)
рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ
рд╡рд┐рдкрдХреНрд╖
- рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ
рдкрд░рд╛рд╡рд░реНрддрди (рдкрд░рд╛рд╡рд░реНрддрди, рдЖрд░рдЯреАрдЯреАрдЖрдИ, рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрдереИрддрд┐рдХ рдХреИрд╢рд┐рдВрдЧ рд╕рдВрдкрддреНрддрд┐рдЗрдиреНрдлреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЖрдорддреМрд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдХреИрд╢ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд╣рдо рдкрд░рд╛рд╡рд░реНрддрди рдХреА рдЧрддрд┐ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рддреИрдпрд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЯреЗрд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛрдб:
private class ReflectionObjectTester : ObjectTester
{
private static readonly PropertyInfo PropertyA = typeof (StaticObject).GetProperty( "A" );
private static readonly PropertyInfo PropertyB = typeof (StaticObject).GetProperty( "B" );
private static readonly object [] Empty = new object [0];
private readonly Object _o = new StaticObject();
public override int A
{
get { return ( int ) PropertyA.GetValue(_o, Empty); }
set { PropertyA.SetValue(_o, value , Empty); }
}
public override string B
{
get { return ( string ) PropertyB.GetValue(_o, Empty); }
set { PropertyB.SetValue(_o, value , Empty); }
}
}
* This source code was highlighted with Source Code Highlighter .
private class ReflectionObjectTester : ObjectTester
{
private static readonly PropertyInfo PropertyA = typeof (StaticObject).GetProperty( "A" );
private static readonly PropertyInfo PropertyB = typeof (StaticObject).GetProperty( "B" );
private static readonly object [] Empty = new object [0];
private readonly Object _o = new StaticObject();
public override int A
{
get { return ( int ) PropertyA.GetValue(_o, Empty); }
set { PropertyA.SetValue(_o, value , Empty); }
}
public override string B
{
get { return ( string ) PropertyB.GetValue(_o, Empty); }
set { PropertyB.SetValue(_o, value , Empty); }
}
}
* This source code was highlighted with Source Code Highlighter .
private class ReflectionObjectTester : ObjectTester
{
private static readonly PropertyInfo PropertyA = typeof (StaticObject).GetProperty( "A" );
private static readonly PropertyInfo PropertyB = typeof (StaticObject).GetProperty( "B" );
private static readonly object [] Empty = new object [0];
private readonly Object _o = new StaticObject();
public override int A
{
get { return ( int ) PropertyA.GetValue(_o, Empty); }
set { PropertyA.SetValue(_o, value , Empty); }
}
public override string B
{
get { return ( string ) PropertyB.GetValue(_o, Empty); }
set { PropertyB.SetValue(_o, value , Empty); }
}
}
* This source code was highlighted with Source Code Highlighter .
рдкрд░рд┐рдгрд╛рдо : 00: 01: 32.3217880 (+ 1293.02%)
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдЙрдкрдпреЛрдЧ рдиреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рд▓рдЧрднрдЧ 13 рдЧреБрдирд╛ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рд╣реИ! рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЛрдЪрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ред
рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордп рдЪрд▓рд╛рдиреЗ
рд╡рд┐рдкрдХреНрд╖:
- рдмрд╣реБрдд рд▓рдВрдмрд╛
- рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВ "рдкрд░рд╛рд╡рд░реНрддрди рд╡рд┐рдЪрд▓рди"
рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╢рдмреНрджрдХреЛрд╢
рд╡рд┐рдзрд┐ рдХрд╛ рдЕрд░реНрде рдХреЗрд╡рд▓ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╣реИ (рд╢рдмреНрджрдХреЛрд╢ <TKey, TValue>)ред рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рд▓реЗрддреЗ рд╣реИрдВ, рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ - рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рдиред рдЖрдкрдХреЛ рдПрдХ рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдХреЛрдб:
private class DictionaryObjectTester : ObjectTester
{
private const string AName = "A" ;
private const string BName = "B" ;
private readonly Dictionary< string , Object> _o = new Dictionary< string , object >();
public override int A
{
get { return ( int ) _o[AName]; }
set { _o[AName] = value ; }
}
public override string B
{
get { return ( string ) _o[BName]; }
set { _o[BName] = value ; }
}
}
* This source code was highlighted with Source Code Highlighter .
private class DictionaryObjectTester : ObjectTester
{
private const string AName = "A" ;
private const string BName = "B" ;
private readonly Dictionary< string , Object> _o = new Dictionary< string , object >();
public override int A
{
get { return ( int ) _o[AName]; }
set { _o[AName] = value ; }
}
public override string B
{
get { return ( string ) _o[BName]; }
set { _o[BName] = value ; }
}
}
* This source code was highlighted with Source Code Highlighter .
рдкрд░рд┐рдгрд╛рдо: 00: 00: 10.8516518 (+ 63.64%)
рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдмрд╣реБрдд рдЧрддрд┐рд╢реАрд▓: рдЖрдк рдЬреЛрдбрд╝ рдФрд░ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд┐рдкрдХреНрд╖:
- рдореВрд▓реНрдпреЛрдВ рдХреА рдХрдордЬреЛрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ (рд╡рд╕реНрддреБ)
- рдХреЗрд╡рд▓ рдореВрд▓реНрдп, рд╡рд┐рдзрд┐рдпрд╛рдВ рдирд╣реАрдВ
рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╢рдмреНрджрдХреЛрд╢
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд╕реНрдХрд░рдг рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдо рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗред рдпрд╛ рд╕рд┐рд░реНрдл рдХрд╛рд░реНрдпреЛрдВ / рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреБрдЫ рдЧрддрд┐рд╢реАрд▓ рд╕реЗрдЯред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
private class DictionaryDelegateTester : ObjectTester
{
private const string AName = "A" ;
private const string BName = "B" ;
private readonly Dictionary< string , Func<Object>> _getters;
private readonly Dictionary< string , Action<Object>> _setters;
private readonly StaticObject _o = new StaticObject();
public DictionaryDelegateTester()
{
_getters = new Dictionary< string , Func<Object>>
{
{AName, () => _o.A},
{BName, () => _o.B}
};
_setters = new Dictionary< string , Action< object >>
{
{AName, v => _o.A = ( int ) v},
{BName, v => _o.B = v.ToString()},
};
}
public override int A
{
get { return ( int ) _getters[AName](); }
set { _setters[AName]( value ); }
}
public override string B
{
get { return ( string ) _getters[BName](); }
set { _setters[BName]( value ); }
}
}
* This source code was highlighted with Source Code Highlighter .
private class DictionaryDelegateTester : ObjectTester
{
private const string AName = "A" ;
private const string BName = "B" ;
private readonly Dictionary< string , Func<Object>> _getters;
private readonly Dictionary< string , Action<Object>> _setters;
private readonly StaticObject _o = new StaticObject();
public DictionaryDelegateTester()
{
_getters = new Dictionary< string , Func<Object>>
{
{AName, () => _o.A},
{BName, () => _o.B}
};
_setters = new Dictionary< string , Action< object >>
{
{AName, v => _o.A = ( int ) v},
{BName, v => _o.B = v.ToString()},
};
}
public override int A
{
get { return ( int ) _getters[AName](); }
set { _setters[AName]( value ); }
}
public override string B
{
get { return ( string ) _getters[BName](); }
set { _setters[BName]( value ); }
}
}
* This source code was highlighted with Source Code Highlighter .
рдкрд░рд┐рдгрд╛рдо: 00: 00: 12.3299023 (+ 85.93%)
рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдмрд╣реБрдд рдЧрддрд┐рд╢реАрд▓: рдЖрдк рдЬреЛрдбрд╝ рдФрд░ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд┐рдкрдХреНрд╖:
- рдЬрдЯрд┐рд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕
рдПрдХ рд╕реНрдерд┐рд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБ
рдЦреИрд░, рдпрд╣рд╛рдБ рд╣рдо рдЙрд╕ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ 'рдЧрддрд┐рд╢реАрд▓' рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВ рддреБрд░рдВрдд рддреАрди рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реВрдВрдЧрд╛ред рдкрд╣рд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рдЧрддрд┐рд╢реАрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рдХреЛ "рд╕рдорд░реНрдерд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ:
private class DynamicObjectTester : ObjectTester
{
private readonly dynamic _o = new StaticObject();
public override int A
{
get { return _o.A; }
set { _o.A = value ; }
}
public override string B
{
get { return _o.B; }
set { _o.B = value ; }
}
}
* This source code was highlighted with Source Code Highlighter .
private class DynamicObjectTester : ObjectTester
{
private readonly dynamic _o = new StaticObject();
public override int A
{
get { return _o.A; }
set { _o.A = value ; }
}
public override string B
{
get { return _o.B; }
set { _o.B = value ; }
}
}
* This source code was highlighted with Source Code Highlighter .
рдкрд░рд┐рдгрд╛рдо: 00: 00: 10.7193446 (+ 61.65%)
рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- DLR (рдПрдл #) рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рд╕рд░рд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕
рд╡рд┐рдкрдХреНрд╖:
- рдФрд░ рдЕрднреА рддрдХ рдбреЗрдврд╝ рдЧреБрдирд╛ рд▓рдВрдмрд╛ рд╣реИ
рдПрдХреНрд╕рдкреЗрдВрдбреЗрдУ рдХреЗ рд╕рд╛рде рдбрд╛рдпрдирд╛рдорд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ
рджрд░рдЕрд╕рд▓, рдЧрддрд┐рд╢реАрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХреНрд╕рдкреЗрдВрдбреЗрдУрдмрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рд╛ред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЕрдЪреНрдЫреА рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ рд╣реИрдВ - рдпрд╣ рджреЛрдиреЛрдВ IDEDIA рдФрд░ IEnumerable рд╣реИред
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
private class ExpandoDynamicObjectTester : ObjectTester
{
private readonly dynamic _o = new ExpandoObject();
public override int A
{
get { return _o.A; }
set { _o.A = value ; }
}
public override string B
{
get { return _o.B; }
set { _o.B = value ; }
}
}
* This source code was highlighted with Source Code Highlighter .
private class ExpandoDynamicObjectTester : ObjectTester
{
private readonly dynamic _o = new ExpandoObject();
public override int A
{
get { return _o.A; }
set { _o.A = value ; }
}
public override string B
{
get { return _o.B; }
set { _o.B = value ; }
}
}
* This source code was highlighted with Source Code Highlighter .
рдкрд░рд┐рдгрд╛рдо: 00: 00: 09.7034082 (+ 46.33%)
рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- DLR (рдПрдл #) рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рд╕рд░рд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ (рдЧрдгрдирд╛)
рд╡рд┐рдкрдХреНрд╖:
- рдЧрддрд┐ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд
рдкрд┐рдХ рдкрд┐рдХ рдбрд╛рдпрдиреЗрдорд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ
рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреА рдПрдХ рдФрд░ рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
private class PureDynamicObjectTester : ObjectTester
{
private readonly dynamic _o = new DynamicContainer();
public override int A
{
get { return _o.A; }
set { _o.A = value ; }
}
public override string B
{
get { return _o.B; }
set { _o.B = value ; }
}
#region Nested type: DynamicContainer
private class DynamicContainer : DynamicObject
{
private int _a;
private string _b;
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (binder.Name == "A" )
{
result = _a;
return true ;
}
if (binder.Name == "B" )
{
result = _b;
return true ;
}
return base .TryGetMember(binder, out result);
}
public override bool TrySetMember(SetMemberBinder binder, object value )
{
if (binder.Name == "A" )
{
_a = ( int ) value ;
return true ;
}
if (binder.Name == "B" )
{
_b = ( string ) value ;
return true ;
}
return base .TrySetMember(binder, value );
}
}
#endregion
}
* This source code was highlighted with Source Code Highlighter .
private class PureDynamicObjectTester : ObjectTester
{
private readonly dynamic _o = new DynamicContainer();
public override int A
{
get { return _o.A; }
set { _o.A = value ; }
}
public override string B
{
get { return _o.B; }
set { _o.B = value ; }
}
#region Nested type: DynamicContainer
private class DynamicContainer : DynamicObject
{
private int _a;
private string _b;
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (binder.Name == "A" )
{
result = _a;
return true ;
}
if (binder.Name == "B" )
{
result = _b;
return true ;
}
return base .TryGetMember(binder, out result);
}
public override bool TrySetMember(SetMemberBinder binder, object value )
{
if (binder.Name == "A" )
{
_a = ( int ) value ;
return true ;
}
if (binder.Name == "B" )
{
_b = ( string ) value ;
return true ;
}
return base .TrySetMember(binder, value );
}
}
#endregion
}
* This source code was highlighted with Source Code Highlighter .
рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗред
рдкрд░рд┐рдгрд╛рдо: 00: 00: 11.1040041 (+ 67.45%)
рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- DLR (рдПрдл #) рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рдЧреБрдг рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд┐рдкрдХреНрд╖:
- рдХрд╛рдлреА рдЕрдзрд┐рдХ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рд╕рдВрдХрд▓рд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ
рдпрд╣ рд╡рд┐рдзрд┐ рдбрд╛рдпрдиреЗрдорд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕реЗ рдбрд╛рдпрдиреЗрдорд┐рдХрдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ), рдФрд░ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡рд┐рдзрд┐ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдИрдПрд▓-рдХреЛрдб рдХрд╛ "рдЙрддреНрд╕рд░реНрдЬрди"ред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдмрд╕ рдЧрддрд┐ рдореЗрдВ рднрд╛рд░реА рд╡реГрджреНрдзрд┐ рдорд┐рд▓рддреА рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛: рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреЗрдЯрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдкрд░реНрдЯреАрдЗрдиреНрдлреЛ рдкрд░ рджреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдХреАрдВ, рд▓реЗрдХрд┐рди рдореЗрдереЗрдорд╛рдЗрдиреНрдлреЛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдлрдВрдХ (рдЧрдЯрд░) рдФрд░ рдПрдХреНрд╢рди (рд╕реЗрдЯрд░) рдХреЗ рд░реВрдк рдореЗрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореЗрд░рд╛ рдЧреЗрдЯрдЯрд░ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреИрд╕реЗ "
o => ((T)o).{name}
" рдФрд░ рд╕реЗрдЯрд░ "
(o, v) => ((T)o).{name} = v
" рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдЗрди рд╕рд╣рд╛рдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдиреЛрдб рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░ рдореЗрдВ рд░рдЦрд╛:
public static Func< object , T> GetValueGetter<T>( this PropertyInfo propertyInfo)
{
var instance = Expression.Parameter( typeof (Object), "i" );
var castedInstance = Expression.ConvertChecked(instance, propertyInfo.DeclaringType);
var property = Expression.Property(castedInstance, propertyInfo);
var convert = Expression. Convert (property, typeof (T));
var expression = Expression.Lambda(convert, instance);
return (Func< object , T>)expression.Compile();
}
public static Action< object ,T> GetValueSetter<T>( this PropertyInfo propertyInfo)
{
var instance = Expression.Parameter( typeof (Object), "i" );
var castedInstance = Expression.ConvertChecked(instance, propertyInfo.DeclaringType);
var argument = Expression.Parameter( typeof (T), "a" );
var setterCall = Expression.Call(
castedInstance,
propertyInfo.GetSetMethod(),
Expression. Convert (argument, propertyInfo.PropertyType));
return (Action< object ,T>)Expression.Lambda(setterCall, instance, argument)
.Compile();
}
* This source code was highlighted with Source Code Highlighter .
public static Func< object , T> GetValueGetter<T>( this PropertyInfo propertyInfo)
{
var instance = Expression.Parameter( typeof (Object), "i" );
var castedInstance = Expression.ConvertChecked(instance, propertyInfo.DeclaringType);
var property = Expression.Property(castedInstance, propertyInfo);
var convert = Expression. Convert (property, typeof (T));
var expression = Expression.Lambda(convert, instance);
return (Func< object , T>)expression.Compile();
}
public static Action< object ,T> GetValueSetter<T>( this PropertyInfo propertyInfo)
{
var instance = Expression.Parameter( typeof (Object), "i" );
var castedInstance = Expression.ConvertChecked(instance, propertyInfo.DeclaringType);
var argument = Expression.Parameter( typeof (T), "a" );
var setterCall = Expression.Call(
castedInstance,
propertyInfo.GetSetMethod(),
Expression. Convert (argument, propertyInfo.PropertyType));
return (Action< object ,T>)Expression.Lambda(setterCall, instance, argument)
.Compile();
}
* This source code was highlighted with Source Code Highlighter .
рдирддреАрдЬрддрди, рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ:
private class ExpressionObjectTester : ObjectTester
{
private static readonly Func< object , int > AGetter =
typeof (StaticObject).GetProperty( "A" ).GetValueGetter< int >();
private static readonly Func< object , string > BGetter =
typeof (StaticObject).GetProperty( "B" ).GetValueGetter< string >();
private static readonly Action< object , int > ASetter =
typeof (StaticObject).GetProperty( "A" ).GetValueSetter< int >();
private static readonly Action< object , string > BSetter =
typeof (StaticObject).GetProperty( "B" ).GetValueSetter< string >();
private readonly StaticObject _o = new StaticObject();
public override int A
{
get { return AGetter(_o); }
set { ASetter(_o, value ); }
}
public override string B
{
get { return BGetter(_o); }
set { BSetter(_o, value ); }
}
}
* This source code was highlighted with Source Code Highlighter .
private class ExpressionObjectTester : ObjectTester
{
private static readonly Func< object , int > AGetter =
typeof (StaticObject).GetProperty( "A" ).GetValueGetter< int >();
private static readonly Func< object , string > BGetter =
typeof (StaticObject).GetProperty( "B" ).GetValueGetter< string >();
private static readonly Action< object , int > ASetter =
typeof (StaticObject).GetProperty( "A" ).GetValueSetter< int >();
private static readonly Action< object , string > BSetter =
typeof (StaticObject).GetProperty( "B" ).GetValueSetter< string >();
private readonly StaticObject _o = new StaticObject();
public override int A
{
get { return AGetter(_o); }
set { ASetter(_o, value ); }
}
public override string B
{
get { return BGetter(_o); }
set { BSetter(_o, value ); }
}
}
* This source code was highlighted with Source Code Highlighter .
рдкрд░рд┐рдгрд╛рдо : 00: 00: 08.5675928 (+ 29.20%)
рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдЕрджреНрднреБрдд рдЧрддрд┐
рд╡рд┐рдкрдХреНрд╖
- рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдзреБрд░реА рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖
рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо | рд╕рдордп | рд╕рдордп рдЬреЛрдбрд╝ |
---|---|---|
рдкреНрд░рддрд┐рдмрд┐рдВрдм | 00: 01: 33.6077139 | 1311.59% |
рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╢рдмреНрджрдХреЛрд╢ | 00: 00: 10.8516518 | 63.64% |
рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╢рдмреНрджрдХреЛрд╢ | 00: 00: 12.3299023 | 85.93% |
рдПрдХ рд╕реНрдерд┐рд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБ | 00: 00: 10.7193446 | 61.65% |
рдПрдХреНрд╕рдкреИрдВрдбреЛ рдХреЗ рд╕рд╛рде рдбрд╛рдпрдирд╛рдорд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ | 00: 00: 09.7034082 | 46.33% |
рдкрд┐рдХ рдкрд┐рдХ рдбрд╛рдпрдиреЗрдорд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ | 00: 00: 11.1040041 | 67.45% |
рд╕рдВрдХрд▓рд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ | 00: 00: 08.5675928 | 29.20% |
рдирд┐рд╖реНрдХрд░реНрд╖ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВ:
- рдЕрдЧрд░ рдЖрдкрдХреЛ рдЧрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рдЦреЛрджрддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рдЗрддрдиреЗ рдбрд░рд╛рд╡рдиреЗ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡реЗ рдХреЗрд╡рд▓ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рдЧрддрд┐рд╢реАрд▓ рдХреЗ рд╕рд╛рде рднреА, рдпрд╣ рдФрд╕рдд рдкрд░ рд▓рдЧрднрдЧ рджреЛ рдЧреБрдирд╛ рддреЗрдЬ рд╣реИ)
- рдпрджрд┐ рдЖрдкрдХреЛ рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБрдУрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, DLR - F #, IronRuby рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдПрдХреНрд╕рдкреЗрдВрдбреАрдУрдмрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред
- .NET рдореЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ s рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдбрд┐рдХреНрд╢рдирд░реА рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдкрд░ рднреА рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡реА рд╣реИ
рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд: рдбрд╛рдпрдирд╛рдорд┐рдХ рдХреЙрд▓реНрд╕ рдХрд╛ рдкреНрд░рдпреЛрдЧ рд╡рд╣реАрдВ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ рдЙрдирдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд░реВрд░рдд рд╣реЛ !
рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдХрдордЬреЛрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдПрдордПрд▓ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдПрдХ рдмреБрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд░реНрдгрди рд╣реИред рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред
рдордд рднреВрд▓реЛ - рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХрд╛рд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛, рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдФрд░ рдкреНрд░рднрд╛рд╡реА рдЕрдиреБрдХреВрд▓рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдирдХрд╛рд░рддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ рдЬреЛ рднрд╛рд╖рд╛ рдХреА рдЧрддрд┐рд╢реАрд▓ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрддреЗ рд╣реИрдВ - рдпрд╛ рддреЛ рд╕рд╣реА рддрд░реАрдХрд╛ рдЪреБрдиреЗрдВ рдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдВред
рдХреНрд▓реЛрдирд┐рдВрдЧ рдпрд╛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб Google рдХреЛрдб рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред