Menjelajahi metode virtual dan abstrak di C #

Bahasa pemrograman C # memberikan dukungan untuk metode virtual dan abstrak, yang masing-masing memiliki keunggulan berbeda. Anda menggunakan metode virtual untuk mengimplementasikan pengikatan akhir, sedangkan metode abstrak memungkinkan Anda untuk memaksa subclass dari tipe tersebut agar metode tersebut diganti secara eksplisit. Dalam posting ini, saya akan menyajikan diskusi tentang metode virtual dan abstrak dan kapan mereka harus digunakan.

Metode virtual adalah metode yang dideklarasikan sebagai virtual di kelas dasar. Sebuah metode dideklarasikan sebagai virtual dengan menentukan kata kunci "virtual" dalam tanda tangan metode. Metode virtual mungkin atau mungkin tidak memiliki tipe pengembalian. Metode virtual memungkinkan subclass dari tipe tersebut untuk mengganti metode. Mereka digunakan untuk mengimplementasikan polimorfisme run time atau pengikatan akhir. Perlu dicatat bahwa anggota virtual atau abstrak kelas tidak dapat dideklarasikan sebagai pribadi. Selain itu, Anda dapat memiliki implementasi dalam metode virtual, misalnya, metode virtual dapat memiliki implementasi di dalamnya. Implementasi ini dapat diganti dengan subclass dari jenis di mana metode virtual telah ditentukan.

MSDN menyatakan: "Kata kunci virtual digunakan untuk mengubah metode, properti, pengindeks, atau deklarasi acara dan memungkinkannya untuk diganti dalam kelas turunan."

Sekarang mari kita gali beberapa kode untuk kejelasan yang lebih baik tentang bagaimana metode virtual digunakan. Lihat cuplikan kode di bawah ini.

public class Base

{

public virtual void Test()

{

Console.WriteLine("This is the base version of the virtual method");

}

}

public class Derived : Base

{

public override void Test()

{

Console.WriteLine("This is the derived version of the virtual method");

}

}

Metode Test () dideklarasikan sebagai virtual di kelas Base dan diganti di kelas Derived. Perhatikan bagaimana kata kunci virtual digunakan untuk mendeklarasikan metode sebagai virtual di kelas Base. Kata kunci virtual tidak diperlukan saat Anda mengganti metode virtual di kelas Derived.

Sekarang, lihat potongan kode yang diberikan selanjutnya yang menggambarkan bagaimana metode virtual dipanggil.

class Program

{

static void Main()

{

Base baseObj1 = new Base();

baseObj1.Test();

Base baseObj2 = new Derived();

baseObj2.Test();

}

}

Perhatikan bahwa dua instance dari kelas Base dibuat - baseObj1 dan baseObj2. Dalam kasus pertama, objek referensi bernama baseObj1 merujuk ke turunan dari kelas Base. Dalam kasus kedua, objek referensi bernama baseObj2 merujuk ke turunan dari kelas Turunan. Saat Anda menjalankan kode, panggilan pertama ke metode virtual akan menampilkan pesan "Ini adalah versi dasar dari metode virtual" di konsol. Dalam kasus kedua, pesan "Ini adalah versi turunan dari metode virtual" akan ditampilkan. Mengapa perbedaan ini?

Dalam kasus pertama, tipe objek referensi baseObj1 dianggap - karena merupakan tipe Base, versi dasar dari metode virtual akan dipanggil. Dalam kasus kedua, konteks objek referensi baseObj2 akan dipertimbangkan dan karenanya hasilnya.

Metode abstrak adalah metode yang dideklarasikan abstrak di kelas dasar dan tidak dapat memiliki implementasi di dalamnya, yaitu tidak dapat memiliki fungsionalitas apa pun di dalamnya. Anda bisa menggunakan metode abstrak saat Anda ingin metode tersebut diganti secara paksa di kelas turunan dari jenis metode abstrak yang telah ditentukan. Ini diberlakukan pada waktu kompilasi oleh kompilator. Jadi, jika Anda telah mendeklarasikan metode sebagai abstrak menggunakan pengubah abstrak di kelas dasar, subkelas dari kelas ini harus mengimplementasikan metode abstrak yang gagal dimana kompilator akan menampilkan kesalahan yang menyatakan bahwa kelas turunan belum mengimplementasikan abstrak. anggota. Intinya,metode abstrak dideklarasikan menggunakan kata kunci abstrak dalam kelas dasar abstrak dan subkelas non-abstrak jenis ini harus memiliki implementasi sendiri dari metode abstrak. Metode abstrak juga secara implisit bersifat virtual tetapi Anda tidak dapat menggunakan kata kunci virtual saat mendeklarasikan metode abstrak. Perlu dicatat bahwa metode abstrak hanya dapat dideklarasikan di dalam kelas abstrak.

Penggunaan umum metode abstrak adalah untuk memaksa penggantian metode ToString () atau Equals (). Cuplikan kode berikut mengilustrasikan bagaimana metode abstrak dideklarasikan dalam kelas abstrak bernama EntityBase.

public abstract class EntityBase

{

public abstract override string ToString();

public abstract override bool Equals(object obj);

}

public class Customer : EntityBase

{

//Implementation code for the abstract methods

}

Kelas EntityBase adalah tipe dasar untuk semua entitas - kelas entitas Pelanggan memperluas kelas ini dan menyediakan implementasi untuk metode abstrak. Intinya, semua kelas entitas akan menyediakan implementasi metode ToString () dan Equals () mereka sendiri. Tidak ada implementasi default untuk metode ini yang diperlukan di kelas dasar dan oleh karena itu mereka ditandai sebagai abstrak. Jadi, penggantian metode dipaksakan dengan mendeklarasikan metode sebagai abstrak di kelas dasar bernama EntityBase.