ΠΠ ΠΠΠΠ§ΠΠΠΠ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡΡΠΈΠΌ Π½Π° C++ ΠΈ Java Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² C# Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΡΠ°ΡΡ Ρ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ Π² C++ ΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ Π² Java, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΡΠ°Π·Π½ΡΠ΅, Ρ ΠΎΡΡ ΠΈ ΠΏΠΎΡ ΠΎΠΆΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°. Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ ΡΡΠ΅ΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°ΠΌΠΈ ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΊΠΎΡΠ΅Π½Π½ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° C++ ΠΈΠ»ΠΈ Java, ΡΠΎ ΠΏΠΎΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΡΡΠ° Π½Π΅ Π΄Π΅Π»Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π°Π»Π΅ΠΊΠΎ ΠΈΠ΄ΡΡΠΈΡ Π²ΡΠ²ΠΎΠ΄ΠΎΠ² ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ'Π΄Π΅ΠΉΡΡΠ²ΡΡΡ Π² Π‘#.
ΠΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
ΠΠ°ΡΠ½Π΅ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ°. ΠΠ΅ΡΠ²ΡΠΌ ΠΈΠ· Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Gen, Π²ΡΠΎΡΡΠΌ β ΠΊΠ»Π°ΡΡ Generics Demo, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡ Gen.
// ΠΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, using System;
//Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ΅ Gen ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° Π’ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ // ΡΠ΅Π°Π»ΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠΏΠ° Gen. class Gen<T> {
Π’ ob; // ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠ° Π’
// ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° public Gen(T ΠΎ) { ob = ΠΎ;
}
// ΠΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ob, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ Π’. public Π’ GetObO { return ob;
}
// ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏ Π’. public void ShowTypeO {
Console.WriteLine("Π ΡΠΈΠΏΡ T ΠΎΡΠ½ΠΎΡΠΈΡΡΡ " + typeof (Π’));
}
}
// ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, class GenericsDemo { static void Main() {
// Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ Gen ΡΠΈΠΏΠ° int.
Gen<int> iOb;
// Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° Gen<int> ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π½Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ iOb iOb = new Gen<int> (102);
// ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , Ρ ΡΠ°Π½ΡΡΠΈΡ ΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ iOb. iOb.ShowType();
// ΠΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ iOb. int v = iOb.GetOb();
Console.WriteLine("ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅: " + v) ;
Console.WriteLine();
// Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° Gen Π΄Π»Ρ ΡΡΡΠΎΠΊ.
Gen<string> strOb = new Gen<string>("ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ²ΡΡΠ°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ.");
// ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , Ρ ΡΠ°Π½ΡΡΠΈΡ ΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ strOb. strOb.ShowType();
// ΠΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ strOb. string str = strOb.GetOb ();
Console.WriteLine("ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅: " + str);
ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
Π ΡΠΈΠΏΡ Π’ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ' System.Int32 ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅: 102
Π ΡΠΈΠΏΡ Π’ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ System.String
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅: ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ²ΡΡΠ°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ.
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Gen Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π°:
class Gen<T> {
Π³Π΄Π΅ Π’ β ΡΡΠΎ ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ°. ΠΡΠΎ ΠΈΠΌΡ ΡΠ»ΡΠΆΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ΅ΡΠΊΠΈ-Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° Gen. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΈΠΌΡ Π’ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ Gen Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΈΠΌΡ Π’ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ³Π»ΠΎΠ²ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ (< >). ΠΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ±ΡΠΈΡΡ: Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ°, ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ³Π»ΠΎΠ²ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ . Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ Gen, ΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌ.
Π ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Gen ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ°, Π½ΠΎ ΠΏΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΈΠΌΡ Π’. Π ΡΠΈΡΠ»Ρ Π΄ΡΡΠ³ΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΠΏΠ° ΠΎΡΠ½ΠΎΡΡΡΡΡ V ΠΈ Π. ΠΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π²ΠΎΠ»ΡΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ TValue ΠΈΠ»ΠΈ Π’ΠΠ΅Ρ. ΠΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ° ΠΏΡΠΈΠ½ΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΠΎΠΏΠΈΡΠ½ΡΡ Π±ΡΠΊΠ²Ρ Π’.
ΠΠ°Π»Π΅Π΅ ΠΈΠΌΡ Π’ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ob, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π°.
Π’ ob; // ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠ° Π’
ΠΠ°ΠΊ ΠΏΠΎΡΡΠ½ΡΠ»ΠΎΡΡ Π²ΡΡΠ΅, ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ° Π’ ΡΠ»ΡΠΆΠΈΡ ΠΌΠ΅ΡΠΊΠΎΠΉ-Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° Gen. ΠΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ob Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ, ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΊ Π’ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° Gen. Π’Π°ΠΊ, Π΅ΡΠ»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π’ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΈΠΏ string, ΡΠΎ Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ob Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ string.
Π ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° Gen.
public Gen(T ΠΎ) { ob = ΠΎ;
}
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΎ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ Π’. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ, ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΌ ΠΊ Π’ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° Gen. Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΎ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ob ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠΈΠΏΡ Π’, ΡΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° Gen ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ° Π’ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΏ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° GetOb ().
public Π’ GetOb() {
return ob;
}
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ob ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ Π’, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π΅ ΡΠΈΠΏ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠΈΠΏΠΎΠΌ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ GetOb ().
ΠΠ΅ΡΠΎΠ΄ ShowType () ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π’, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π΅Π³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ typeof. ΠΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΈΠΏ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π’ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° Gen, ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ typeof ΠΏΠΎΠ»ΡΡΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠΈΠΏΠ΅.
Π ΠΊΠ»Π°ΡΡΠ΅ Generics Demo Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Gen. Π‘Π½Π°ΡΠ°Π»Π° Π² Π½Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΊΠ»Π°ΡΡΠ° Gen Π΄Π»Ρ ΡΠΈΠΏΠ° int.
Gen<int> iOb;
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅. ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠΈΠΏ int ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ³Π»ΠΎΠ²ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° Gen. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ int ΡΠ»ΡΠΆΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΈΠΏΠ°, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΠΌ ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠ° Π’ Π² ΠΊΠ»Π°ΡΡΠ΅ Gen. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΊΠ»Π°ΡΡΠ° Gen, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΈΠΏ Π’ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ int Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΎΠ½ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ int ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠΈΠΏΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ob ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° GetOb ().
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ iOb ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° Gen Π΄Π»Ρ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΡΠΈΠΏΠ° int.
iOb = new Gen<int> (102);
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΊΠ»Π°ΡΡΠ° Gen ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΈΠΏΠ° int. ΠΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β iOb), ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ°, ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ Gen<int>. ΠΠΎΡΡΠΎΠΌΡ ΡΡΡΠ»ΠΊΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ new, ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ ΡΠΈΠΏΡ Gen<int>. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°Π½Π΅Ρ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
iOb = new Gen<double>(118.12); // ΠΡΠΈΠ±ΠΊΠ°!
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ iOb ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ Gen<int> ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° Gen<double>. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠΈΠΏΠΎΠ² ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π³Π»Π°Π²Π½ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΈΠΏΠΎΠ²ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ.
ΠΠ°ΡΠ΅ΠΌ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠΈΠΏ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ob Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ iOb β ΡΠΈΠΏ System. Int32. ΠΡΠΎ ΡΡΡΡΠΊΡΡΡΠ° .NET, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΡΠΈΠΏΡ int. ΠΠ°Π»Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ob ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π°.
int v = iOb.GetOb ();
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° GetOb () ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏ Π’, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° ΡΠΈΠΏ int ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ iOb, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄ GetOb () Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ° int. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ v ΡΠΈΠΏΠ° int.
ΠΠ°Π»Π΅Π΅ Π² ΠΊΠ»Π°ΡΡΠ΅ GenericsDemo ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° Gen<string>.
Gen<string> strOb = new Gen<string>("ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ²ΡΡΠ°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ.");
Π ΡΡΠΎΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΈΠΏΠ° string, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΊΠ»Π°ΡΡΠ° Gen Π²ΠΌΠ΅ΡΡΠΎ Π’ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏ string. Π ΠΈΡΠΎΠ³Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΊΠ»Π°ΡΡΠ° Gen Π΄Π»Ρ ΡΠΈΠΏΠ° string, ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.