рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк C # рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рдореЗрдореЛрд░реА рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдпреВрдирд┐рдбрд╛рдпрд░реЗрдХреНрд╢рдирд▓ рд╕реВрдЪреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдмреАрдЬ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдЪрд▓реЗрдВ рдФрд░ рджрд┐рдЦрд╛рдПрдВ рдХрд┐ рдЖрдЦрд┐рд░рдХрд╛рд░, рдЗрд╕ рддрд░рд╣ рдХреА рд╕реВрдЪреА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
new CustomLinkedList< double , ListBasedAllocator<CustomLinkedListNode< double , int >>, int >()
рддреБрд░рдВрдд рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдо рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рджрд╛рд╡рд╛ рдХреА рдЧрдИ рд╕реВрдЪреА рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЦреБрд╢реА рдХреЛ рдЦрддреНрдо рдХрд░ рджреЗрддрд╛ рд╣реИред
рдЦреБрдж рдХреЗ рд╕рдВрдХреЗрдд
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ (!), .NET рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ C ++ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕рдм рдЙрдкрд▓рдмреНрдз рд╣реИ
- рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдгред рдЗрди рд╕рднреА рдХреЛ рдвреЗрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЖрдк рддреБрд░рдВрдд рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред
- рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреЙрдХреНрд╕рд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдгред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╡реЗ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдмрд╣реБрдд рдХрдо рд╣реИрдВ рдФрд░ рд╕рдорд╛рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред
- рдкреНрд░рдмрдВрдзрд┐рдд рдкреЙрдЗрдВрдЯрд░реНрд╕ред рд╡реЗ рдвреЗрд░ рдФрд░ рдвреЗрд░ рджреЛрдиреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд╡реЗ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ / рдпрд╛ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╡реЗ рд╣рдорд╛рд░реЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ: рд╣рдо рдЗрд╕реЗ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣рд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмреЗрд╣рддрд░ рд╕рдордп рддрдХ рд╕реНрдердЧрд┐рдд рдХрд░ рджреЗрдВрдЧреЗред рдЗрд╕ рдмреАрдЪ, рд╣рдо рд╣рд░ рдЬрдЧрд╣ рдЯрд╛рдЗрдк рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реИрдВред
рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╕рдВрд╢реЛрдзрди
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
- /// <рд╕рд╛рд░рд╛рдВрд╢>
- /// рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрд╡рдВрдЯрди рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред
- /// </ рд╕рд╛рд░рд╛рдВрд╢>
- /// <typeparam name = "T"> рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЬреЛ рдХрд┐ рдПрд▓реЛрдХреЗрдЯрд░ </ typeparam> рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
- /// <typeparam name = "TPointer"> рдореЗрдореЛрд░реА рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ </ typeparam>
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ICustomTypeAllocator <T, TPointer>
- {
- /// <рд╕рд╛рд░рд╛рдВрд╢>
- /// рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
- /// </ рд╕рд╛рд░рд╛рдВрд╢>
- TPointer рдЖрд╡рдВрдЯрд┐рдд ();
- /// <рд╕рд╛рд░рд╛рдВрд╢>
- /// рд╕реВрдЪрдХ рдореЗрдВ рдореЗрдореЛрд░реА рдореЗрдореЛрд░реАред
- /// рдпрджрд┐ checkErrors рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЖрд╡рдВрдЯрди рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ
- /// рдХрд┐ рдпрд╣ рдкреЙрдЗрдВрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ,
- /// рдФрд░, рдЕрдЧрд░ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред
- /// </ рд╕рд╛рд░рд╛рдВрд╢>
- /// <param name = "рдкреЙрдЗрдВрдЯрд░"> рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ </ param>
- /// <param name = "checkErrors"> </ param>
- рд╢реВрдиреНрдп рдореБрдХреНрдд (TPointer рд╕реВрдЪрдХ, рдмреВрд▓ рдЬрд╛рдБрдЪрдХ = рдЧрд▓рдд );
- /// <рд╕рд╛рд░рд╛рдВрд╢>
- /// рдПрдбреНрд░реЗрд╕ рдкреЙрдЗрдВрдЯрд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- /// </ рд╕рд╛рд░рд╛рдВрд╢>
- /// <рдкрд░рдо рдирд╛рдо = "рд╕реВрдЪрдХ"> рдЙрд╕ рд╕реНрдореГрддрд┐ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдкрддрд╛ рдЬрд┐рд╕рдореЗрдВ рд╡рд╕реНрддреБ рд╕реНрдерд┐рдд рд╣реИред </ param>
- рдЯреА рдЗрд╕ [TPointer рд╕реВрдЪрдХ] { рдорд┐рд▓рддрд╛ рд╣реИ ; рд╕реЗрдЯ ; }
- /// <рд╕рд╛рд░рд╛рдВрд╢>
- /// рдРрд╕рд╛ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рдЕрдорд╛рдиреНрдп рд╣реЛрддрд╛ рд╣реИ
- /// </ рд╕рд╛рд░рд╛рдВрд╢>
- TPointer InvalidPointer { рдорд┐рд▓рддрд╛ рд╣реИ ; }
- /// <рд╕рд╛рд░рд╛рдВрд╢>
- /// рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЙрдЗрдВрдЯрд░ рдорд╛рдиреНрдп рд╣реИ рдпрд╛ рдирд╣реАрдВред
- /// </ рд╕рд╛рд░рд╛рдВрд╢>
- /// <param name = "рдкреЙрдЗрдВрдЯрд░"> рдЪреЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ </ param>
- рдмреВрд▓ IsPointerValid (TPointer рд╕реВрдЪрдХ);
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЬрдм рд╣рдо рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпрд╛ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛ рдкрд░ рдЖрдПрдВрдЧреЗ:
var pointer = allocator.Allocate();
allocator[pointer].Value = 0;
рдпрджрд┐ рд╣рдордиреЗ рдЯрд╛рдЗрдк-рдЯреА рдХреЛ рдЯреА (рдЬреИрд╕реЗ, рдпрд╣ рд╣рдорд╛рд░рд╛ рдкреНрд░рд╛рдердорд┐рдХ рд▓рдХреНрд╖реНрдп рд╣реИ) рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХрд╛рд░рдг рд╕рд░рд▓ рд╣реИ: рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ [рд╕реВрдЪрдХ] рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддреЗ рдкрд░ рдирд┐рд╣рд┐рдд рд╕рдВрд░рдЪрдирд╛
рдХреА рдПрдХ
рдкреНрд░рддрд┐ рд╣реЛрдЧреА, рди рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рд╣реАред рдореИрдВ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рджреЛ рддрд░реАрдХреЗ рдЬрд╛рдирддрд╛ рд╣реВрдВ:
- рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ рдХреЗ рд▓рд┐рдП рдЖрдмрдВрдЯрдХ [рд╕реВрдЪрдХ] рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рд╣реЗрдЬреЗрдВ, рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд▓рд┐рдЦреЗрдВред
- рдЖрд╡рдВрдЯрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддреЗ рдкрд░ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдореВрд▓реНрдп рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдЧрд╛ред
рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ рдЬреЛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╢реВрдиреНрдп рджреЗрддрд╛ рд╣реИ:
public delegate void Modifier<T>( ref T value );
рдФрд░ рд╣рдорд╛рд░реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рд╕рдВрд╢реЛрдзрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ:
- /// <рд╕рд╛рд░рд╛рдВрд╢>
- /// рджрд┐рдП рдЧрдП рдкреЙрдЗрдВрдЯрд░ рдкрддреЗ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ
- /// </ рд╕рд╛рд░рд╛рдВрд╢>
- /// <рдкрд░рдо рдирд╛рдо = "рд╕реВрдЪрдХ"> рдПрдХ рдкрд░рд╕реНрдкрд░ рд╡рд╕реНрддреБ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ </ param>
- /// <param name = "modifier"> рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рди рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ </ param>
- рд╢реВрдиреНрдп рд╕реЗрдЯ (TPointer рд╕реВрдЪрдХ, рд╕рдВрд╢реЛрдзрдХ <T> рд╕рдВрд╢реЛрдзрдХ);
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдирд╣реАрдВ рд╣реИ
рдореИрдВ рдореБрдХреНрдд рдиреЛрдбреНрд╕ рдХреА рд╕реВрдЪреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред C ++ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рдВрдШ рдХреЗ рд░реВрдк рдореЗрдВ рддрддреНрд╡ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдареАрдХ рдПрдХ рддрддреНрд╡ рд╣реИ - рд╕реВрдЪреА рдореЗрдВ рдЕрдЧрд▓реЗ рдореБрдХреНрдд рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХред рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд╣рд░ .NET рдЬреБрдбрд╝рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреЙрдЗрдВрдЯрд░ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЬрдЧрд╣ рдкреНрд░рджрд╛рди рдХрд░реЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреЙрдЗрдВрдЯрд░ рдиреЛрдб {рдХреЗ рдПрдХрдорд╛рддреНрд░ рд╕рджрд╕реНрдп рдХреЗ рд╕рд╛рде ILinkedListNode рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ; рд╕реЗрдЯ; }, рдФрд░ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрд▓рд┐рдорд┐рдиреЗрдЯрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред
public class ListBasedAllocator<T>: ICustomTypeAllocator<T, int > where T: ILinkedListNode< int >
рдЖрд╡рдВрдЯрди рдФрд░ рд╕реВрдЪреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рд╛рднрд┐рдорд╛рдиреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдореБрдлреНрдд рдиреЛрдбреНрд╕ рдХреА рд╕реВрдЪреА рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдпреВрдирд┐рдбрд╛рдпрд░реЗрдХреНрд╢рдирд▓ рд╕реВрдЪреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рдм рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрд░реНрдореЗрди рдХреА рдкреБрд╕реНрддрдХ рдореЗрдВред
рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб (C # рдореЗрдВ) рдФрд░ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ (F # рдореЗрдВ) рдбрд╛рдЙрдирд▓реЛрдб рдпрд╛
рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рд╕рдВрднрд╡рдд:, рд╕реВрдЪреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдФрд░ рдЗрд╕реЗ рдПрдл # рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдХрд░ рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реЗрдВрд╕ рдХреЗ рдХрд╛рд░рдг рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдкрдХреЛ рдЕрднреА рддрдХ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬрд╛рджреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред :)
рдкреБрдирд╢реНрдЪ рдпрд╣ рдЕрднреА рднреА рд╣реЛрдЧрд╛!