рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЙрд▓: рд╡рд┐рдзрд┐ рддреБрд▓рдирд╛



рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЙрд▓: рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВ рд╣реИ?





рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдереИрддрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП, рдХрднреА-рдХрднреА рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЙрд▓ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдПрдХ рдРрд╕реА рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИред рдпрд╛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рд╕реЗ рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЬреЛ рдХреЗрд╡рд▓ рд░рди-рдЯрд╛рдЗрдо рдкрд░ рдЬреНрдЮрд╛рдд рд╣реЛрдЧреАред



рдпрд╣ рдХрднреА-рдХрднреА рддрдерд╛рдХрдерд┐рдд рдЯрдВрдХрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдпрджрд┐ рдХреЛрдИ рдмрддрдЦ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдмрддрдЦ рдХреА рддрд░рд╣ рддреИрд░рддрд╛ рд╣реИ рдФрд░ рдмрддрдЦ рдХреА рддрд░рд╣ рдЭрдкрдЯрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдПрдХ рдмрддрдЦ рд╣реИред




рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ 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 рдХреЛрдб рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред



All Articles