Bagaimana bekerja dengan obat generik di C #

C # adalah bahasa yang diketik dengan kuat. Ini menyiratkan bahwa saat menggunakan C # Anda harus mendeklarasikan tipe sebelum menyimpan data di dalamnya. Meskipun jenis keselamatan ini membantu menegakkan keamanan dan interoperabilitas antara bahasa yang menargetkan lingkungan terkelola, Anda sebagai pengembang dibatasi untuk menentukan jenis objek apa pun yang perlu Anda kerjakan.

Oke, tapi bagaimana jika Anda ingin menyimpan data dalam koleksi yang aman tanpa beban dari tinju dan unboxing? Di sinilah obat generik bisa membantu.

Generik memungkinkan Anda untuk bekerja dengan data yang aman dari tipe-tipe tanpa pengeluaran tambahan dari tinju dan unboxing. Anda dapat memanfaatkan obat generik untuk membuat koleksi yang aman dari tipe, serta kelas dan metode yang dapat menerima tipe sebagai parameter. Kelas-kelas seperti itu yang pernah dideklarasikan dapat bekerja dengan tipe apa pun. Ini membantu kode Anda menjadi lebih mudah dikelola, diperluas, dipelihara, dan efisien. Pada artikel ini kita akan mengeksplorasi obat generik dan bagaimana mereka dapat diimplementasikan menggunakan bahasa pemrograman C #.

Generik membantu Anda mengimplementasikan algoritme yang dapat bekerja pada berbagai jenis. Sebagai contoh, Anda mungkin ingin menulis algoritme untuk mengurutkan larik bilangan bulat atau ganda atau bahkan larik string. Untuk mengimplementasikan algoritma pengurutan seperti itu tanpa generik, Anda biasanya memerlukan beberapa metode pengurutan - satu untuk setiap jenis.

Setelah Anda mendeklarasikan kelas atau metode menggunakan parameter tipe, Anda dapat menunda menentukan jenis kelas atau metode yang akan bekerja sampai saat kelas dan metode ini diakses dari kode klien. Generik mempromosikan keamanan tipe, pemeliharaan kode, efisiensi kode, dan peningkatan kinerja. Perhatikan bahwa Anda dapat memanfaatkan obat generik untuk mengimplementasikan kelas, antarmuka, metode, acara, dan delegasi generik Anda sendiri.

Saat menggunakan obat generik, Anda tidak perlu lagi mengetik objek cast ke masing-masing jenis - informasi jenis didokumentasikan dengan baik dalam kode Anda. Ketika Anda menggunakan obat generik, kompilator membuat pemeriksaan waktu kompilasi pada kode Anda untuk kesesuaian dengan keamanan tipe. Kode yang menggunakan obat generik selalu karena menghindari biaya tambahan tinju dan unboxing.

Daftar kode berikut menunjukkan tiga metode yang mengurutkan data input - Anda memerlukan satu metode sortir untuk setiap jenis.

public static int[] Sort(int[] integerArray)

  {

      //Code to sort an array of integers

      return integerArray;

  }

public static string[] Sort(string[] stringArray)

  {

      //Code to sort an array of strings

      return stringArray;

  }

public double[] Sort(double[] doubleArray)

  {

      //Code to sort an array of doubles

      return doubleArray;

  }

Jika Anda menggunakan Generik, Anda hanya dapat memiliki satu metode yang dapat menerima parameter tipe dan mengurutkan data input saat diminta.

public class Algorithm

    {

        public static T[] Sort(T[] inputArray)

        {

            //Code to sort a generic array

            return inputArray;

        }

    }

Ketik batasan parameter

Saat bekerja dengan obat generik, Anda harus mengetahui batasan umum yang meliputi: batasan derivasi dan batasan konstruktor default. Batasan derivasi digunakan untuk menentukan antarmuka atau kelas yang akan digunakan untuk menentukan turunan untuk tipe generik.

Berikut adalah contoh yang menggambarkan bagaimana the interface ILoggertelah digunakan untuk membatasi parameter tipe T (saat mendefinisikan DBLoggerkelas) menjadi dari ILoggerantarmuka tipe .

public interface ILogger

    {

        //Some code

    }

    public class DBLogger where T : ILogger

    {

        //Some code

    }

Parameter tipe generik Anda dapat berupa tipe nilai atau tipe referensi. Sebagai contoh, Anda dapat menentukan kelas Anda yang berisi parameter tipe generik dengan salah satu cara berikut.

public class FileLogger where T : class

    {

        //Some code

    }

 public class BaseLogger where T: int

    {

        //Some code

    }

Batasan konstruktor digunakan untuk menjalankan konstruktor default untuk parameter tipe generik. Berikut adalah contoh untuk menggambarkan konsep ini.

class DBLogger where T : new() // The generic type parameter T must have a default constructor

{

   //Some code

}

Anda juga dapat menggunakan parameter tipe umum saat bekerja dengan warisan. Berikut adalah contoh yang menunjukkan bagaimana Anda bisa mencapai ini. Perhatikan bahwa parameter tipe generik dalam contoh yang diberikan berikutnya harus memiliki konstruktor default.

public class BaseLogger

    {

        //Some code

    }

    public class FileLogger : BaseLogger where T : new()

    {

        //Some code

    }

Daftar kode berikut menunjukkan bagaimana metode umum dapat diimplementasikan.

public class BaseLogger

    {

        public void Initialize(T t)

        {

          //Code to initialize logger

        }

    }

Lihat potongan kode yang diberikan di atas. Perhatikan bagaimana parameter tipe generik telah digunakan sebagai parameter dalam Initialize()metode. Saya akan membahas lebih lanjut tentang obat generik di posting saya selanjutnya di sini. Anda dapat mempelajari lebih lanjut tentang obat generik di sini: //msdn.microsoft.com/en-us/library/512aeb7t.aspx