Bahasa C
Generik memungkinkan Anda untuk menentukan spesifikasi tipe data elemen pemrograman dalam kelas atau metode, hingga benar-benar digunakan dalam program. Dengan kata lain, generik memungkinkan Anda untuk menulis kelas atau metode yang dapat bekerja dengan tipe data apa pun.
Anda menulis spesifikasi untuk kelas atau metode, dengan parameter pengganti untuk tipe data. Ketika kompiler menemukan konstruktor untuk kelas atau panggilan fungsi untuk metode, itu menghasilkan kode untuk menangani tipe data tertentu. Contoh sederhana akan membantu memahami konsep −
Demo Langsungusing System; using System.Collections.Generic; namespace GenericApplication { public class MyGenericArray<T> { private T[] array; public MyGenericArray(int size) { array = new T[size + 1]; } public T getItem(int index) { return array[index]; } public void setItem(int index, T value) { array[index] = value; } } class Tester { static void Main(string[] args) { //declaring an int array MyGenericArray<int> intArray = new MyGenericArray<int>(5); //setting values for (int c = 0; c < 5; c++) { intArray.setItem(c, c*5); } //retrieving the values for (int c = 0; c < 5; c++) { Console.Write(intArray.getItem(c) + " "); } Console.WriteLine(); //declaring a character array MyGenericArray<char> charArray = new MyGenericArray<char>(5); //setting values for (int c = 0; c < 5; c++) { charArray.setItem(c, (char)(c+97)); } //retrieving the values for (int c = 0; c< 5; c++) { Console.Write(charArray.getItem(c) + " "); } Console.WriteLine(); Console.ReadKey(); } } }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
0 5 10 15 20 a b c d e
Generik adalah teknik yang memperkaya program Anda dengan cara berikut −
Ini membantu Anda memaksimalkan penggunaan kembali kode, keamanan jenis, dan kinerja.
Anda dapat membuat kelas koleksi generik. Pustaka kelas .NET Framework berisi beberapa kelas koleksi generik baru di System.Collections.Generic ruang nama. Anda dapat menggunakan kelas koleksi generik ini alih-alih kelas koleksi di System.Collections ruang nama.
Anda dapat membuat antarmuka, kelas, metode, acara, dan delegasi generik Anda sendiri.
Anda dapat membuat kelas generik yang dibatasi untuk mengaktifkan akses ke metode pada tipe data tertentu.
Anda dapat memperoleh informasi tentang tipe yang digunakan dalam tipe data generik saat run-time melalui refleksi.
Pada contoh sebelumnya, kita telah menggunakan kelas generik; kita dapat mendeklarasikan metode generik dengan parameter tipe. Program berikut mengilustrasikan konsep
Demo Langsungusing System; using System.Collections.Generic; namespace GenericMethodAppl { class Program { static void Swap<T>(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; } static void Main(string[] args) { int a, b; char c, d; a = 10; b = 20; c = 'I'; d = 'V'; //display values before swap: Console.WriteLine("Int values before calling swap:"); Console.WriteLine("a = {0}, b = {1}", a, b); Console.WriteLine("Char values before calling swap:"); Console.WriteLine("c = {0}, d = {1}", c, d); //call swap Swap<int>(ref a, ref b); Swap<char>(ref c, ref d); //display values after swap: Console.WriteLine("Int values after calling swap:"); Console.WriteLine("a = {0}, b = {1}", a, b); Console.WriteLine("Char values after calling swap:"); Console.WriteLine("c = {0}, d = {1}", c, d); Console.ReadKey(); } } }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
Int values before calling swap: a = 10, b = 20 Char values before calling swap: c = I, d = V Int values after calling swap: a = 20, b = 10 Char values after calling swap: c = V, d = I
Anda dapat menentukan delegasi generik dengan parameter tipe. Misalnya
delegate T NumberChanger<T>(T n);
Contoh berikut menunjukkan penggunaan delegasi ini
Demo Langsungusing System; using System.Collections.Generic; delegate T NumberChanger<T>(T n); namespace GenericDelegateAppl { class TestDelegate { static int num = 10; public static int AddNum(int p) { num += p; return num; } public static int MultNum(int q) { num *= q; return num; } public static int getNum() { return num; } static void Main(string[] args) { //create delegate instances NumberChanger<int> nc1 = new NumberChanger<int>(AddNum); NumberChanger<int> nc2 = new NumberChanger<int>(MultNum); //calling the methods using the delegate objects nc1(25); Console.WriteLine("Value of Num: {0}", getNum()); nc2(5); Console.WriteLine("Value of Num: {0}", getNum()); Console.ReadKey(); } } }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
Value of Num: 35 Value of Num: 175
Bahasa C
C# untuk loop Pada artikel ini, kita akan belajar tentang for loop dalam C# dan berbagai cara menggunakannya dalam sebuah program. Dalam pemrograman, seringkali diinginkan untuk mengeksekusi blok pernyataan tertentu untuk beberapa kali tertentu. Solusi yang mungkin adalah mengetikkan pernyataan-pe
C# Array Multidimensi Dalam tutorial ini, kita akan belajar tentang array multidimensi dalam C# menggunakan contoh array dua dimensi. Sebelum kita mempelajari tentang array multidimensi, pastikan untuk mengetahui tentang array satu dimensi di C#. Dalam array multidimensi, setiap elemen array juga
C# foreach loop Dalam artikel ini, kita akan belajar tentang foreach loop (alternatif untuk for loop) dan cara menggunakannya dengan array dan koleksi. C# menyediakan alternatif yang mudah digunakan dan lebih mudah dibaca untuk loop for, loop foreach saat bekerja dengan array dan koleksi untuk ber
Metode C# Dalam tutorial ini, kita akan belajar tentang metode C# dengan bantuan contoh. Metode adalah blok kode yang melakukan tugas tertentu. Misalkan Anda perlu membuat program untuk membuat lingkaran dan mewarnainya. Anda dapat membuat dua metode untuk menyelesaikan masalah ini: cara menggamb