рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдпрд╛ рдкреИрдЯрд░реНрди рдПрдХ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдбрд┐рдЬрд╛рдЗрди рд╣реИ рдЬреЛ рдПрдХ рд╕рдВрджрд░реНрдн рдХреЗ рднреАрддрд░ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдЕрдХреНрд╕рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдПрдХ рд╣рдЬрд╛рд░ рдмрд╛рд░ рд╕реБрдирд╛ рд╣реИ ... рд╢рдмреНрджреЛрдВ рдФрд░ рдкреИрдЯрд░реНрди рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЬрд╛рдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ .NET рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреИрдЯрд░реНрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ .NET рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдЖрдзрд╛рд░ рдХрдХреНрд╖рд╛рдПрдВ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд╕реНрддрдХреЗрдВ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдкреБрд╕реНрддрдХ рдЕрд▓рдЧ рд╣реИ рдФрд░ рдпрд╣ рдкреНрд░рд╕рд┐рджреНрдз рдкреБрд╕реНрддрдХ "рдЧреИрдВрдЧреНрд╕ рдСрдл рдлреЛрд░" рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕реНрдерд┐рддрд┐ рдХреА рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХ рд╕реЗ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ред
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЫрд╣ рдкреИрдЯрд░реНрди рдХреЛ рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗ:
- рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ;
- рдЗрдЯрд░реЗрдЯрд░;
- рдбреЗрдХреЛрд░реЗрдЯрд░;
- рдПрдбрд╛рдкреНрдЯрд░;
- рдХрд╛рд░рдЦрд╛рдиреЗ;
- рд░рдгрдиреАрддрд┐ред
рддреЛ рдЪрд▓реЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд░реЗрдХреНрд╖рдХ
рд╢рд╛рдпрдж .NET рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдкреИрдЯрд░реНрди рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╣реИред рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреА рдиреАрдВрд╡ рд╣реИ, рдЬреЛ рдЕрдкрдиреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж рд╕реЗ .NET рдХрд╛ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд░рд╣реЗ рд╣реИрдВред .NET рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдореЗрдВ рдЙрдирдХреЗ рдпреЛрдЧрджрд╛рди рдХреА рд╕рд░рд╛рд╣рдирд╛ рдирд╣реАрдВ рдХрд░рдирд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдХрд┐ рд╡реЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (рд▓реИрдореНрдмреНрдбрд╛, рдХреНрд▓реЛрдЬрд╝рд░, рдЖрджрд┐) рдореЗрдВ рдХреНрдпрд╛-рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВред
рдкреИрдЯрд░реНрди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп GOF рд╕реЗ рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╣реИ: рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ-рд╕реЗ-рдХрдИ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣
рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдПрдХ рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддреА рд╣реИ, рддреЛ рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╕рднреА рд▓реЛрдЧ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рд╕реВрдЪрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред
C # рдореЗрдВ рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
рд╕рд░рд▓ рдкреНрд░реЗрдХреНрд╖рдХpublic interface IObserver
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ .NET рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ рдХрд╣рд╛ рд╣реИ, рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдЕрдореВрд░реНрддрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ C # рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
.NET рдореЗрдВ рдСрдмреНрдЬрд░реНрд╡рд░ public delegate void MyEventHandler();
рдЪреЗрд╣рд░реЗ рдкрд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдирддрд╛ред рдПрдХ рдШрдЯрдирд╛ рдПрдХ рд╡рд┐рд╖рдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ, рдЬрдмрдХрд┐ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ред
рдЯрд┐рдкреНрдкрдгреАрдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЛрдб рдореЗрдВ рдПрдХ рдЦрд╛рдореА рд╣реИ: рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рдд рдХреЛрдб
s.MyEvent -= () => Console.WriteLine("Hello habrahabr");
рдпрд╣ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд╣реАрдВ рд╣рдЯрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ (рднреЗрдбрд╝ рдХрд╛ рдмрдЪреНрдЪрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐) рдХреЛ рдмрдЪрд╛рдирд╛ рд╣реЛрдЧрд╛ред
static void Main(string[] args) { Subject s = new Subject(); MyEventHandler myEv1 = () => Console.WriteLine("Hello habarhabr"); MyEventHandler myEv2 = () => Console.WriteLine("Hello world"); s.MyEvent += myEv1; s.MyEvent += myEv2; s.MyEvent -= myEv1; s.RaiseEvent();
.NET 4.0 рдиреЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдкреИрдЯрд░реНрди рдХреЛ рд╕реАрдзреЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╡реЗ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
public interface IObservable<out T> { IDisposable Subscribe(IObserver<T> observer); } public interface IObserver<in T> { void OnCompleted(); void OnError(Exception error); void OnNext(T value); }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, IObservable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╣рдорд╛рд░реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдЖрдИрдбреАрд╕реЙрдлрд╝реЗрдмрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реМрдЯрд╛рддреА рд╣реИ рдЬреЛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдкреНрд░рджрд╛рддрд╛ рдЙрдиреНрд╣реЗрдВ рднреЗрдЬрдирд╛ рдмрдВрдж рдХрд░ рджреЗред рдЕрдм рдЖрдк рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╕реНрдкреЛрдЬрд╝ рд╡рд┐рдзрд┐ рдХрд╣рдХрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЯрд┐рдкреНрдкрдгреАрдЗрдЯрд░реЗрдЯрд░
.NET рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрдо рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдЧрд▓рд╛ рдкреИрдЯрд░реНрди рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдирд╣реАрдВ рд╣реИред
GOF рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреИрдЯрд░реНрди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп: рдПрдХ рд╕рдордЧреНрд░ рд╡рд╕реНрддреБ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдЙрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдкреНрд░рдХрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
.NET рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░, рдЗрдЯреНрд░реЗрдЯрд░ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ: IEnumerable рдФрд░ IEnumerator
public interface IEnumerable { IEnumerator GetEnumerator(); } public interface IEnumerator { object Current { get; } bool MoveNext(); void Reset(); }
рд╕рд╛рде рд╣реА рдЙрдирдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдПрдирд╛рд▓реЙрдЧреНрд╕:
public interface IEnumerable<out T> : IEnumerable { IEnumerator<T> GetEnumerator(); } public interface IEnumerator<out T> : IDisposable, IEnumerator { T Current { get; } }
рдлрд╝реЙрд░рдЪ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдЗрдХрд╛рдИ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ IEnumerable <> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрдЯреНрд░реЗрдЯрд░ рдХреЛ рднреА рдмрдирд╛рдирд╛ рд╣реИ - рдПрдХ рд╡рд░реНрдЧ / рд╕рдВрд░рдЪрдирд╛ рдЬреЛ IEnumerator <рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрдЯреНрд░рд┐рдпрд░ рдмреНрд▓реЙрдХ рд╕реА # 2.0 рдореЗрдВ
рдЙрдкрдЬ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, IEnumerator <> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рдЕрдм рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╣реЛрддрд╛ рд╣реИ (рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ)ред
рдлрд╝реЙрд░реНрдЪрд░ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдЕрдЧрд▓-рдмрдЧрд▓ рдХрд╛ рд▓реВрдк рдХрдВрдзреЗ рд╕реЗ рдХрдВрдзрд╛ рдорд┐рд▓рд╛рдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб
foreach (var item in Enumerable.Range(0, 10)) { Console.WriteLine(item); }
рдпрд╣ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рд╣реИ:
IEnumerator<int> enumerator = Enumerable.Range(0, 10).GetEnumerator(); try { while (enumerator.MoveNext()) { int item = enumerator.Current; Console.WriteLine(item); } } finally { if (enumerator != null) { enumerator.Dispose(); } }
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрдЯреНрд░реЗрдЯрд░ рдкреИрдЯрд░реНрди C # рднрд╛рд╖рд╛ рдХрд╛ рдЖрдзрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг (рдлрд╝реЙрд░рдЪреЗрдХ) рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЯрд┐рдкреНрдкрдгреАрдпрд╣ рддрдереНрдп рдХрд┐ рдлрд╝реЙрд░рдЪ рд▓реВрдк рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рдЗрдХрд╛рдИ IEnumerable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ (рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рджрд┐рдП рдЧрдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) рдХрдИ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рд╕реЗрд░реНрдЧреЗрдИ
рддреЗрдкреНрд▓рд╛рдХреЛрд╡ рд╕рд░реНрдЧреЗрдИрдЯ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛
рдкрдж рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ
рдлреЛрд░рдЪ рдЪрдХреНрд░ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред
рдлрд╝реЙрд░реЗрд╕реНрдЯ рд▓реВрдк рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ .NET рдореЗрдВ рдХрдИ рдЕрдиреБрдХреВрд▓рди рд╣реИрдВред рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдПрдХ рдЗрдЯреЗрд░реЗрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдХрдИ рдлрд╝реЙрд░рдЪ рд▓реВрдк рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдПрд░реЗ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (рд╕реАрдПрд▓рдЖрд░ рдореЗрдВ рдЧрд╣рди рд░реВрдк рд╕реЗ рдПрдХреАрдХреГрдд) рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлрд╝реЙрд░рдЪ рд▓реВрдк рд▓реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред
рдЯрд┐рдкреНрдкрдгреАрдбреЗрдХреЛрд░реЗрдЯрд░
рдкреИрдЯрд░реНрди рдирдВрдмрд░ 3 - рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ред
GOF рд╕реЗ рдкреИрдЯрд░реНрди рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп: рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирдИ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд▓рдЪреАрд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред
.NET рдореЗрдВ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ System.IO.Stream рдХреНрд▓рд╛рд╕ рдФрд░ рдЙрд╕рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
public static void WriteBytes(Stream stream) { int oneByte; while ((oneByte = stream.ReadByte()) >= 0) { Console.WriteLine(oneByte); } } static void Main(string[] args) { var memStream = new MemoryStream(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); WriteBytes(memStream); var buffStream = new BufferedStream(memStream); WriteBytes(buffStream); Console.ReadLine(); }
рд░рд╛рдЗрдЯрдмрд╛рдЗрдЯ рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдбрд┐рд╕реНрдХ рд╕реЗ рдПрдХ рдмрд╛рдЗрдЯ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдмрдлрд░рд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдмреНрд▓реЙрдХ рдореЗрдВ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЬрд▓реНрджреА рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдмрдлрд╝рд░рдбрд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╛рд╕ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рдХрд╛рд░ (рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░реАрдо) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╢реЗрд▓ рдореЗрдВ рд▓рдкреЗрдЯрдХрд░ (рд╕рдЬрд╛рдХрд░) рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмрдлрд╝рд░рдбрд╕реНрдЯреНрд░реАрдо рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╛рд╕ рдХреЗ рдореВрд▓ рддрд░реАрдХреЛрдВ, рдЬреИрд╕реЗ рдХрд┐ рдкрдврд╝реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ, рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
System.Security.Cryptography.CryptoStream рдХреНрд▓рд╛рд╕ рдЖрдкрдХреЛ рдлреНрд▓рд╛рдИ рдкрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рд╕реНрдЯреНрд░реАрдо рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЯрд╛рдЗрдк рд╕реНрдЯреНрд░реАрдо рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЕрдкрдиреЗ рд╢реЗрд▓ рдореЗрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реИред
рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛, рдмрдлрд╝рд░рдбреНрд░реАрдо рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕реЗ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрдврд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рд╣рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕реЗ "рд╕рдЬрд╛рдиреЗ" рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рдВрдХрд▓рди рдореЗрдВ рдирд╣реАрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЕрдЧрд░ рд╣рдо рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЕрдиреБрдХреВрд▓рдХ
GOF рд╕реЗ рдЕрдбреИрдкреНрдЯрд░ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп: рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЧреНрд░рд╛рд╣рдХ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред рдПрдбреЗрдкреНрдЯрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЕрд╕рдВрдЧрдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ред
COM рдФрд░ .NET рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЖрдВрддрд░рд┐рдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред CLR COM рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд░рди-рдЯрд╛рдЗрдо рдирд╛рдордХ рдПрдХ рдордзреНрдпрд╕реНрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢реЗрд▓ (RCW) рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд░рдирдЯрд╛рдЗрдо рдкреНрд░рддреНрдпреЗрдХ COM рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рд░реИрдкрд░ рдмрдирд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдореМрдЬреВрджрд╛ рд╕рдВрджрд░реНрднреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛред
рдЕрдиреНрдп рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдореЗрдВ, рдПрдХ рд░рди-рдЯрд╛рдЗрдо рдЬрд┐рд╕реЗ рд╢реЗрд▓ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реБрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдУрд░ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдФрд░ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдХреЗ рдмреАрдЪ рд╢реЗрд▓ рдорд╛рд░реНрд╢рд▓реНрд╕ рдбреЗрдЯрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд░рди-рдЯрд╛рдЗрдо рд╢реЗрд▓ рд╢реЗрд▓ рдкрджреНрдзрддрд┐ рдХреЗ рддрд░реНрдХреЛрдВ рдФрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХреЛрдИ .NET рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд┐рд╕реА рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реНрдХ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рддреЛ рд╢реЗрд▓ рдЙрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ BSTR рдкреНрд░рдХрд╛рд░ (рдПрдХ
рдкреЛрд╕реНрдЯ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ .NET рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ) рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ COM рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдмрдВрдзрд┐рдд рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ BSTR рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рд╣реА рдбреЗрдЯрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рддрд░реАрдХреЗ рд╕реЗ рднреЗрдЬрддреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрд░рд╕реАрдбрдмреНрд▓реНрдпреВ рдПрдХ рдПрдбрд╛рдкреНрдЯрд░ рд╣реИ рдЬреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдХрд╛рд░рдЦрд╛рдирд╛ рд╣реИ
рдкрд╛рдВрдЪрд╡рд╛ рдкреИрдЯрд░реНрди рдПрдХ рддрд░рд╣ рдХрд╛ рдХрд╛рд░рдЦрд╛рдирд╛ рд╣реИред
GOF рд╕реЗ рдлреИрдХреНрдЯреНрд░реА рдкреИрдЯрд░реНрди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп: рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдкрд░рд╕реНрдкрд░ рдпрд╛ рдЕрдиреНрдпреЛрдиреНрдпрд╛рд╢реНрд░рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
System.Convert рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╕реНрдЯреИрдЯрд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдФрд░ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд░рд┐рдЯрд░реНрди рдорд╛рди рд╕рд╣реА рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕рдВрдЦреНрдпрд╛ рдЧреИрд░-рд╢реВрдиреНрдп рдереА рдФрд░ рдЕрдиреНрдпрдерд╛ рдЧрд▓рдд рд╣реИред рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рддрд░реАрдХреЗ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирдП рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рд░рдгрдиреАрддрд┐ рдХреЛ рдлреИрдХреНрдЯрд░реА рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдмреБрд▓рд╛рдП рдмрд┐рдирд╛, рд╣рдо рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлреИрдХреНрдЯреНрд░реА рдкреИрдЯрд░реНрди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЫрд┐рдкрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдмрд╕ рдлрд╝реИрдХреНрдЯрд░реА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЙрд╕ рдХреЛрдб рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
Activator.CreateInstance рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рд╡рд┐рдзрд┐ рдПрдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдЕрд░реНрдерд╛рддред рд╡рд╣ рдЬреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
рд░рдгрдиреАрддрд┐
рдкреИрдЯрд░реНрди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЬреАрдУрдПрдл рд╕реЗ рд░рдгрдиреАрддрд┐ рд╣реИ: рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдПрдХ рдкрд░рд┐рд╡рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ
рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдирд┐рдореЗрдп рдмрдирд╛рддрд╛ рд╣реИред рд░рдгрдиреАрддрд┐ рдЖрдкрдХреЛ рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рд╕рд░рд▓ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЫрд╛рдВрдЯрдирд╛ рд╣реИред Array.Sort рд╡рд┐рдзрд┐ рдХреЗ рдЕрдзрд┐рднрд╛рд░ рдореЗрдВ рд╕реЗ рдПрдХ, IComparable рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рддрдерд╛рдХрдерд┐рдд рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рдирд┐рдореЗрдп рд╣реИрдВред
public interface IComparable<T> { int CompareTo(T other); }
рд╕реЙрд░реНрдЯ рдХреЛрдб рд╡рд╕реНрддреБрддрдГ рддрддреНрд╡ рддреБрд▓рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдореЗрдВ Array.BinarySearch рд╡рд┐рдзрд┐рдпрд╛рдБ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ IComparable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ Array.Find рд╡рд┐рдзрд┐ рдХреЛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ Prateate рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ (рд░рдгрдиреАрддрд┐рдпреЛрдВ) рдХреЛ рдЕрд▓рдЧ рдХрд░рдХреЗ, рд╣рдо рд╡рд┐рдзрд┐ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рд░ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЕрд▓рдЧ рдкреИрдЯрд░реНрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЫрд╛рдВрдЯрддреЗ рд╕рдордп рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдм рдЬрдм рд╣рдордиреЗ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХреБрдЫ рдкреИрдЯрд░реНрдиреЛрдВ рдХреЛ рджреЗрдЦрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЙрд╕ рдХреЛрдб рдореЗрдВ рдкрд╣рдЪрд╛рдирдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕ рдХреЛрдб рдореЗрдВ рдЖрдк рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ C # рднрд╛рд╖рд╛ рдФрд░ .NET рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдпреЛрдЧрджрд╛рди рдХреА рд╕рд░рд╛рд╣рдирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдХрд┐ рдпрд╣ рдХреНрд▓рд╛рд╕рд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдмрд╕ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдорджрджрдЧрд╛рд░ рд░рд╣рд╛ рд╣реИред