Bagaimana menerapkan polimorfisme di C #

Polimorfisme mengacu pada kemampuan untuk menyajikan antarmuka yang sama untuk berbagai bentuk. Meskipun konsep polimorfisme sama di semua bahasa pemrograman yang mendukungnya, implementasinya berbeda dari satu bahasa ke bahasa lainnya.

Ketiga jenis polimorfisme tersebut adalah overloading, parametrik, dan inklusi. Polimorfisme membantu mempromosikan fleksibilitas dalam desain dengan memungkinkan metode yang sama memiliki implementasi yang berbeda. Intinya, Anda dapat memanfaatkan polimorfisme untuk memisahkan antarmuka dari implementasi. Ini mempromosikan penggunaan kembali kode dan pemisahan masalah dalam aplikasi Anda.

Polimorfisme beban berlebih adalah jenis yang ada di kelas yang tidak bergantung satu sama lain - mereka tidak terkait (warisan, ketergantungan, dll.) Satu sama lain dengan cara apa pun. Sebagai contoh, Anda dapat memiliki dua kelas berbeda yang tidak saling terkait satu sama lain dan memiliki metode dengan nama yang sama. Overloading operator adalah contoh dari jenis polimorfisme ini.

Polimorfisme parametrik, atau polimorfisme templat, adalah jenis di mana Anda memiliki lebih dari satu metode di kelas Anda dengan nama yang identik tetapi parameter yang bervariasi, yaitu, semuanya memiliki nama metode yang sama, tetapi parameternya berbeda.

Polimorfisme inklusi juga dikenal sebagai redefinisi atau penimpaan metode. Dalam jenis polimorfisme ini, sub kelas dapat mendefinisikan kembali metode kelas dasar. Kemampuan ini disebut juga sebagai spesialisasi.

Polimorfisme parametrik

Ini mengacu pada bentuk polimorfisme di mana Anda memiliki lebih dari satu metode di kelas Anda yang memiliki nama yang sama tetapi berbeda dalam tanda tangan metode mereka. Tanda tangan metode terdiri dari jenis kembalian metode, jenis parameter ke metode, dan urutan parameter ini. Oleh karena itu, metode yang menerima bilangan bulat dan karakter sebagai argumen berbeda dalam tanda tangan dari metode lain yang menerima karakter dan bilangan bulat sebagai argumen meskipun tipe kembalian kedua metode ini (memiliki nama metode yang identik) adalah sama. Kompilator menentukan metode yang tepat untuk dipanggil dengan membandingkan tanda tangan metode dari metode yang kelebihan beban.

Daftar kode berikut menggambarkan bagaimana metode overloading dapat diimplementasikan.

public enum Severity

    {

        Informational, Warning, Critical

    }

    public class Logger

    {

        public void Log(string message)

        {

            //Some code

        }

        public void Log(string message, Severity severity)

        {

            //Some code

        }

    }

Lihat daftar kode di atas. Perhatikan bagaimana metode Log () kelebihan beban. Ini adalah contoh polimorfisme waktu kompilasi.

Polimorfisme inklusi

Polimorfisme inklusi, atau penimpaan metode, dapat dicapai di C # menggunakan metode virtual. Dalam penggantian metode, Anda memiliki metode yang memiliki tanda tangan identik yang ada di kelas dasar dan turunannya. Anda biasanya ingin menggunakan metode virtual untuk mengimplementasikan polimorfisme run-time atau pengikatan akhir. Perhatikan bahwa metode virtual adalah salah satu yang dideklarasikan sebagai virtual di kelas dasar dan Anda dapat mengizinkan subkelas dari tipe tersebut untuk mengganti metode virtual.

Cuplikan kode berikut menunjukkan dua kelas - kelas dasar bernama Logger yang berisi metode virtual yang disebut Log dan kelas turunan bernama FileLogger yang memperluas kelas Logger dan menimpa metode Log kelas dasar.

public class Logger

    {

        public virtual void Log(string message)

        {

            Console.WriteLine("Inside the Log method of the base class Logger");

        }

    }

    public class FileLogger : Logger

    {

        public override void Log(string message)

        {

            Console.WriteLine("Inside the Log method of the FileLogger class");

        }

    }

Ini adalah contoh metode penggantian. Baik basis dan kelas turunan memiliki metode yang sama dengan tanda tangan yang identik. Kami menggunakan metode overriding untuk mengimplementasikan polimorfisme run time atau pengikatan akhir. Cuplikan kode berikut menunjukkan bagaimana metode Log dapat dipanggil menggunakan referensi kelas dasar.

static void Main(string[] args)

        {

            Logger logger = new FileLogger();

            logger.Log("Hello World!");

            Console.ReadKey();

        }

Ketika Anda menjalankan potongan kode di atas, metode Log dari kelas turunan, yaitu kelas Filelogger akan dipanggil. Jika metode Log tidak dideklarasikan sebagai virtual di kelas dasar, versi dasar dari metode Log akan dipanggil sebagai gantinya. Karena pengikatan ini terjadi pada akhir waktu proses, jenis polimorfisme ini dikenal sebagai polimorfisme waktu proses atau pengikatan akhir.