Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° Π’ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΈΠΏΠ°, Π½Π°ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° MyClass, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IMyInterface ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΌΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
ΠΡΠ»ΠΈ ΠΆΠ΅ Π² ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ°, ΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠ½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° where, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅.// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² where.using System;// Π£ ΠΊΠ»Π°ΡΡΠ° Gen ΠΈΠΌΠ΅ΡΡΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ°, ΠΈ Π½Π° ΠΎΠ±Π° Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ// ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² where.class Gen<T, V> where T : classwhere V : struct { T ob1; V ob2; public Gen(T t, V v) { ob1 = t; ob2 = v; }}class MultipleConstraintDemo { static void Main() { // ΠΡΠ° ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ // string β ΡΡΠΎ ΡΡΡΠ»ΠΎΡΠ½ΡΠΉ ΡΠΈΠΏ, a int β ΡΠΈΠΏ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Gen<string, int> obj = new Gen<string, int>("ΡΠ΅ΡΡ", 11); // Π ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ // bool Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΡΡΠ»ΠΎΡΠ½ΠΎΠΌΡ ΡΠΈΠΏΡ. // Gen<bool, int> obj = new Gencbool, int>(true, 11); }}
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠ»Π°ΡΡ Gen ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ, Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌΡΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² where. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ ΠΎΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π°ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.class Gen<T, V> where T : class where V : struct {
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ where ΠΎΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠΌ. ΠΡΡΠ³ΠΈΠ΅Π·Π½Π°ΠΊΠΈ ΠΏΡΠ΅ΠΏΠΈΠ½Π°Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ Π½Π΅ Π½ΡΠΆΠ½Ρ ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ.ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ Π²ΡΡΠ΅, ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π²Π°ΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΈΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠΏΠ°ΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΡΡΠ»ΠΎΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ. Π’Π°ΠΊΠ°Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠ»Ρ ΡΡΡΠ»ΠΎΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡnull, Π΄Π»Ρ Π½Π΅ΡΡΡΡΠΊΡΡΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ β 0 ΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false, Π΅ΡΠ»ΠΈ ΡΡΠΎΡΠΈΠΏ bool, Π° Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡ ΡΠΈΠΏΠ° struct β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ Ρ ΠΏΠΎΠ»ΡΠΌΠΈ,ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π ΡΡΠΎΠΉ ΡΠ²ΡΠ·ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ: ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΠ΅ΡΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ°: null, 0 ΠΈΠ»ΠΈ Π½Π΅ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅?ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Test:class Test<T> { Π’ obj; // ...
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ obj ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π΄Π²ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²obj = null; // ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΡΠ»ΠΎΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ²
ΠΈΠ»ΠΈobj = 0; // ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΈΡΠ»ΠΎΠ²ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈ // ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, Π½ΠΎ Π½Π΅ Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡ
ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ? ΠΠ»Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π΄ΠΈΠ»Π΅ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠΉΡΠΎΡΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° default, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅.default(ΡΠΈΠΏ)
ΠΡΠ° ΡΠΎΡΠΌΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° default ΠΏΡΠΈΠ³ΠΎΠ΄Π½Π° Π΄Π»Ρ Π²ΡΠ΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠΏΠ°, Π±ΡΠ΄Ρ ΡΠΎ ΡΠΈΠΏΡΠ·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΎΡΠ½ΡΠ΅ ΡΠΈΠΏΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ Π΄Π°Π½Π½ΡΡ ΡΠΎΡΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°default.// ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΡΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° default.using System;class MyClass { // ...}// ΠΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠ° Π’ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.class Test<T> { public Π’ obj; public Test() { // Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π³ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΡΠ»ΠΎΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ². // obj = null; // Π½Π΅ Π³ΠΎΠ΄ΠΈΡΡΡ // Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π³ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. // obj = 0; // Π½Π΅ Π³ΠΎΠ΄ΠΈΡΡΡ // Π ΡΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π³ΠΎΠ΄ΠΈΡΡΡ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΡΡΠ»ΠΎΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², // ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. obj = default(T); // ΠΠΎΠ΄ΠΈΡΡΡ! } // ...}class DefaultDemo { static void Main() { // Π‘ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Test, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡΠ»ΠΎΡΠ½ΡΠΉ ΡΠΈΠΏ. Test<MyClass> Ρ = new Test<MyClass>(); if(x.obj == null) Console.WriteLine("ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ x.obj ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ <null>."); // Π‘ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Test, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠΏ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Test<int> Ρ = new Test<int>(); if(Ρ.obj == 0) Console.WriteLine("ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Ρ.obj ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0."); }}
ΠΠΎΡ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ x.obj ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ <null>.ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Ρ.obj ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0.ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ
Π C# ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅,ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° XY Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ X, Y.// ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ.using System;// ΠΡΠ° ΡΡΡΡΠΊΡΡΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΉ.struct XY<T> { Π’ Ρ ; Π’ Ρ; public XY(Π’ Π°, Π’ b) { Ρ = Π°; Π£ = b; } public Π’ X { get { return Ρ ; } set { Ρ = value; } } public T Y { get { return y; } set { Ρ = value; } }}class StructTest { static void Main() { XY<int> xy = new XY<int>(10, 20); XY<double> xy2 = new XY<double>(88.0, 99.0); Console.WriteLine(xy.X + ", " + xy.Y); Console.WriteLine(xy2.X + ", " + xy2.Y); }}
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.10, 2088, 99
ΠΠ°ΠΊ ΠΈ Π½Π° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, Π½Π° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΌΠΎΠ³ΡΡ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΈΠΏΠ° Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ XYΠ½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ.struct XY<T> where Π’ : struct {// ...Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², Π² ΠΌΠ΅ΡΠΎΠ΄Π°Ρ , ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌΡΡ Π² ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠ°Ρ , ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ,ΡΠ°ΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌΠΈ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΡΠΈΠΏΠ°. ΠΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π²Π½Π΅ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ArrayUtils, Π° Π² Π½Π΅ΠΌ β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄CopyInsert(). ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² Π΄ΡΡΠ³ΠΎΠΉ, Π²Π²ΠΎΠ΄Ρ ΠΏΠΎΡ ΠΎΠ΄Ρ Π΄Π΅Π»Π° Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅. ΠΠ΅ΡΠΎΠ΄ CopyInsert() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.// ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.using System;// ΠΠ»Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌ.class ArrayUtils { // ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ², Π²Π²ΠΎΠ΄Ρ ΠΏΠΎ Ρ ΠΎΠ΄Ρ Π΄Π΅Π»Π° Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. // ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌ. public static bool CopyInsert<T> (Π’ e, uint idx, T[] src, T[] target) { // ΠΡΠΎΠ²Π΅ΡΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅Π»ΠΈΠΊ ΠΌΠ°ΡΡΠΈΠ². if(target.Length < src.Length+1) return false; // Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° src Π² ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ², // ΠΏΠΎΠΏΡΡΠ½ΠΎ Π²Π²Π΅Π΄Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΅ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ idx. for(int i=0, j=0; i < src.Length; i++, j++) { if(i == idx) { target[j] = e; j++; } target[j] = src[i]; } return true; }}class GenMethDemo { static void Main() { int[] nums = { 1, 2, 3 }; int[] nums2 = new int[4]; // ΠΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums. Console.Write("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums: "); foreach(int x in nums) Console.Write(Ρ + " "); Console.WriteLine(); // ΠΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠΈΠΏΠ° int. ArrayUtils.Copylnsert(99, 2, nums, nums2); // ΠΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums2. Console.Write("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums2: "); foreach(int x in nums2) Console.Write(x + " "); Console.WriteLine(); //Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠΎΠ΄ copyInsert. string[] strs = {"ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ", "Π²Π΅ΡΡΠΌΠ°", "ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Ρ."}; string[] strs2 = new string[4]; // ΠΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs. Console.Write("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs: "); foreach(string s in strs) Console.Write(s + " "); Console.WriteLine(); // ΠΠ²Π΅ΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ. ArrayUtils.Copylnsert("Π² Π‘#", 1, strs, strs2); // ΠΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs2. Console.Write("Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs2: "); foreach(string s in strs2) Console.Write(s + " "); Console.WriteLine(); // ΠΡΠΎΡ Π²ΡΠ·ΠΎΠ² Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ // ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ double, Π° ΡΡΠ΅ΡΠΈΠΉ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ // Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΡΠΈΠΏΠ° int. // ArrayUtils.Copylnsert(0.01, 2, nums, nums2); }}
ΠΠΎΡ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums: 1 2 3Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° nums2: 1 2 99 3Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs: ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π²Π΅ΡΡΠΌΠ° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Ρ.Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° strs2: ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² C# Π²Π΅ΡΡΠΌΠ° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Ρ.
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ CopyInsert(). ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π°.public static bool CopyInsert<T>(Π’ e, uint idx, T[] src, T[] target) {