Lisk рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рдЕрдиреБрдмрдВрдз

рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдмрдВрдбреА рдХреЗ рд▓реЗрдЦ " рдПрд▓рдПрд╕рдкреА рдХреЗ рд▓рд┐рдП рдкреВрд░рдХ " рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛ рдФрд░ рдЗрд╕реЗ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХреЗ рд▓реЗрдЦ рдкрд░ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд▓рд╛ рд╕рд╡рд╛рд▓, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЯреА рдХреНрд▓рд╛рд╕ рдХреЗ DoubleList рдореЗрдВ рдЯреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ IList рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддрд╛рдХрд┐ рдРрдб рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░, рдПрдХ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рджреЛ рд╕рдорд╛рди рддрддреНрд╡ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВред рдЪреВрдВрдХрд┐ рдЯреА рдХреНрд▓рд╛рд╕ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреЗрд╡рд▓ рдПрдХ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд▓рд┐рд╕реНрдХреЛрд╡ рд╕рдмрд╕реНрдЯреАрдЯреНрдпреВрд╢рди рд╕рд┐рджреНрдзрд╛рдВрдд (рдПрд▓рдПрд╕рдкреА) рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ .NET рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдорд╛рдорд▓рд╛ рд╣реИ, рдФрд░ рдЖрдЗрдП рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдпрд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдФрдкрдЪрд╛рд░рд┐рдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреА рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред



рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рдВрдкрд╛рджрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╣рд╛рдБ, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЙрдЪрд┐рдд рд╣реИ)ред рдореВрд▓ рдХрд╛рд░реНрдп рдиреЗ DoubleList рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ T рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ IList рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ, T рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ ICollection рдореЗрдВ Add рд╡рд┐рдзрд┐ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ T рд╡рд░реНрдЧ рдХрд╛ DoubleList рд╕рдВрдЧреНрд░рд╣ рдЕрдиреБрдмрдВрдз рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ , рд╕реВрдЪреА рдХрд╛ рдирд╣реАрдВред

рдиреЛрдЯ
рдХреЛрдб рдкрдврд╝рдиреЗ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдореИрдВ DoubleList рд╡рд░реНрдЧ рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рддрд╛рд░ рд╕рдВрдЪрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдВрдЯреЗрдирд░, рдЕрд░реНрдерд╛рддреНред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░рд╛ DoubleList рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ ICollection рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред

public class DoubleList : ICollection<string> { private readonly List<string> _backingList = new List<string>(); public void Add(string item) { //     ,   2  _backingList.Add(item); _backingList.Add(item); } //     } 


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

 [Test] public void TestAddMethodAddsOnlyOneElement() { ICollection<string> collection = new DoubleList(); int oldCount = collection.Count; collection.Add("foo"); Assert.That(collection.Count, Is.EqualTo(oldCount + 1)); } 


рд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рдВрдЧреНрд░рд╣ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдпрджрд┐ DoubleList рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рд╡рд╛рд▓ рд╣реИ: рдХреНрдпрд╛ рд╣рдо рдЯреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ ICollection рдХреЗ рдРрдб рдореЗрдердб рд╕реЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЬрдм рд╕рд╣реАрддрд╛ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ (рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЪрд╛рд╣реЗ рд╡рд╣ рдмрдЧ рд╣реЛ рдпрд╛ рди рд╣реЛ, рдФрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ: рдХреЛрдб рдпрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ), рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдФрдкрдЪрд╛рд░рд┐рдХ рдпрд╛ рдЧреИрд░-рдФрдкрдЪрд╛рд░рд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗрд╡рд▓ рддрднреА рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рд╡рд╣реА рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдХреБрдЫ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, рдЬреИрд╕реЗ x = y / 2 , рди рддреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╕рд╣реА рд╣реИ рдФрд░ рди рд╣реА рдЧрд▓рдд рд╣реИред рдпрд╣ рд╕рдм рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ x рдФрд░ y рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╕рдВрдмрдВрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, "рдЕрдиреБрдмрдВрдз рджреНрд╡рд╛рд░рд╛ рдбрд┐рдЬрд╛рдЗрдиред рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╢реБрджреНрдзрддрд╛" рджреЗрдЦреЗрдВ )ред рдРрдб рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реИ: рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХрд╛ рдФрдкрдЪрд╛рд░рд┐рдХ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛, рд╣рдо рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд░рд┐рд╕ рджреНрд╡рд╛рд░рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо ICollection (T) .Add Method рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ рдЬреЛ рдХрд╣рддреА рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рддреА рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╛ рдХрд┐рд╕ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛) рд╕рд┐рд░реНрдл рд╣рдорд╛рд░реА рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдЯреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЖрдИрд╕реАрдУрд▓реЗрдХреНрд╢рди рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░, рд╣рдо рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рджреЛ рд╕рдорд╛рди рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ 2 рдХреА рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреАред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рдпрджрд┐ рдРрдб рдореЗрдердб рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдПрдХ рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╣реА рддрддреНрд╡ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ; рдПрдХрдорд╛рддреНрд░ рд╕реАрдорд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЖрдЗрдЯрдо рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдХреЛрдИ рдЕрдиреНрдп рдкреВрд░реНрд╡ рд╢рд░реНрдд рдирд╣реАрдВ рд╣реИрдВ (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдРрдб рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХреЛрдИ рдЕрдиреНрдп рдЪреЗрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

 [TestCaseSource("GetAllCollections")] public void TestAddToCollectionTwiceAddsTwoElement(ICollection<string> collection) { int oldCount = collection.Count; if (collection.IsReadOnly) { Console.WriteLine("Current collection type ({0}) is readonly. Skipping it...", collection.GetType()); return; } collection.Add("foo"); collection.Add("foo"); Assert.That(collection.Count, Is.EqualTo(oldCount + 2)); } 


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

 private static ICollection<string>[] GetAllCollections() { return new ICollection<string>[] { new List<string>(), new HashSet<string>(), new Collection<string>(), new BindingList<string>(), new LinkedList<string>(), new ObservableCollection<string>(), new ReadOnlyCollection<string>(new List<string>()), new SortedSet<string>(), new string[]{}, }; } 


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

рдЕрдм рдЖрдЗрдП рдореВрд▓ рдкреНрд░рд╢реНрди рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ: рдХреНрдпрд╛ рдРрдб рдореЗрдердб рдХреЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рд╕реЗ Lisk рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ DoubleList рд╡рд░реНрдЧ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрддрд╛ рд╣реИ ? рдЙрддреНрддрд░: рдирд╣реАрдВ, рдпрд╣ рдирд╣реАрдВ рдЯреВрдЯрддрд╛!

рдЯреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ ICollection рдХреА рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХрд┐рддрдиреЗ рддрддреНрд╡ рд╣реЛрдВрдЧреЗ, рдЗрд╕ рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрди рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ ( рдЯреА рдХреЗ ICollection рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреВрд░реНрд╡ рд╢рд░реНрдд рд╣реИ: рдРрдб рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреЙрдиреНрдЯреЗрдиреНрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ рдХреЙрд▓ рд╕рд╣реА рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рдЕрд░реНрдерд╛рдд newCount> = oldCount)ред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╣рдо рдореМрдЬреВрджрд╛ рдмрдпрд╛рди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 Assert.IsTrue(collection.Contains("foo")); 


рддрдм рд╕рднреА рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓ рд╣реЛрдВрдЧреЗред

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

рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ DoubleList Lisk рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ BCL рд╕реЗ рдХреБрдЫ рдорд╛рдирдХ рд╕рдВрдЧреНрд░рд╣ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдбрдмрд▓рд▓рд┐рд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди "рдЯреЗрдврд╝рд╛" рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рдЬреЛ рдЬреНрдЮрд╛рди (*) рдореЗрдВ рд╕рдордЭрдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ, рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЕрдкреАрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрд╕реНрдХреЙрд░реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛ред

рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рдХрд┐ рдореЗрдпрд░ рдЕрдкрдиреА рдореЛрдЯреА рдХрд┐рддрд╛рдм рдореЗрдВ (рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВ) рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдФрдкрдЪрд╛рд░рд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдкреВрд░реНрд╡ рд╢рд░реНрдд, рдкреЛрд╕реНрдЯрдХреЙрдиреНрдбрд┐рд╢рди рдФрд░ рдЖрдХреНрд░рдордгрдХрд╛рд░реА)ред рдпрд╣ рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд╡рд┐рд╡рд░рдг рдХреА рдХрдореА рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рд╕реЗ "рд╕рд╣реА" рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд╛рд░рд┐рд╕ рдХреЛ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ "рд╕рд╣реА" рдХреЛрдИ рднреА рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдФрд░ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЯрд┐рдкреНрдкрдгреА) рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рд░рд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ ред
рдЕрдЧрд▓реА рдмрд╛рд░ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреЛрдб рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ (рдЬрд┐рд╕рдХрд╛ рд╕рдорд░реНрдерди рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ mscorlib рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ) рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдРрдб рдореЗрдердб рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдФрдкрдЪрд╛рд░рд┐рдХ рдкрдж рд╣реИред

-

(*) рдореИрдВ рдкрд╛рда рдореЗрдВ рд╕реАрдзреЗ рдлреБрдЯрдиреЛрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рд╕реЗ рд╣рдЯ рдЬрд╛рдКрдВрдЧрд╛ рдФрд░ рд▓рд┐рд╕реНрдХреЛрд╡ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдЙрдкрдзрд╛рд░рд╛ рдмрдирд╛рдКрдВрдЧрд╛ред

рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди Liskov рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрддред рдкрд░рд┐рднрд╛рд╖рд╛

рдЬреЗрдореНрд╕ рдХреЛрдкрд▓реЗрдпрди рдХреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдкреБрд╕реНрддрдХ , C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, Liskov рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ:

... рдпрджрд┐ рдЯрд╛рдЗрдк S рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ o1 рдХреЗ рд▓рд┐рдП T рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ O2 рдореМрдЬреВрдж рд╣реИ, рддреЛ рдРрд╕реЗ рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдиреНрд╣реЗрдВ P рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, P рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рддрдм рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдЬрдм O1 рдХреЛ O2 рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ S, T рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ " рдЯреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ " рдХрд╛ рдорддрд▓рдм рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ " рдкреА рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ " рдЬрдм рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╣реАрдВ рднреА рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИред

рдПрдХ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп, рд▓реЗрдХрд┐рди рдХреЛрдИ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рднрд╛рд╖рд╛, рдмреЙрдм рдорд╛рд░реНрдЯрд┐рди рдХреА рдкреБрд╕реНрддрдХ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ:

рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд┐рд╕реА рднреА рдЙрдкрдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред

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

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

рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ


  1. рдмрд░реНрдЯреНрд░реЗрдВрдб рдореЗрдпрд░ред рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдбрд┐рдЬрд╝рд╛рдЗрди
  2. рд░реЙрдмрд░реНрдЯ рд╕реАред рдорд╛рд░реНрдЯрд┐рдиред C # рдореЗрдВ рдЪреБрд╕реНрдд рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд, рдкреИрдЯрд░реНрди рдФрд░ рддрдХрдиреАрдХ
  3. рд░реЙрдмрд░реНрдЯ рд╕реАред рдорд╛рд░реНрдЯрд┐рди рдж рд▓рд┐рд╕реНрдХреЛрд╡ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕рд┐рджреНрдзрд╛рдВрдд
  4. рд░реЙрдмрд░реНрдЯ рд╕реАред рдорд╛рд░реНрдЯрд┐рди рдбрд┐рдЬрд╛рдЗрди рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рдкреИрдЯрд░реНрди
  5. рдЕрдиреБрдмрдВрдз рджреНрд╡рд╛рд░рд╛ рдбрд┐рдЬрд╛рдЗрдиред рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╢реБрджреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
  6. рдЕрдиреБрдмрдВрдз рджреНрд╡рд╛рд░рд╛ рдбрд┐рдЬрд╛рдЗрдиред рд╡рд┐рд░рд╛рд╕рдд

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


All Articles