Abstract and Sealed Classes and Class Members


Keyword abstrak memungkinkan kita membuat class dan member class yang tidak lengkap dan harus diimplementasikan di class turunan. Keyword sealed memungkinkan kita mencegah inheritance class atau member class tertentu yang sebelumnya ditandai virtual.

  • Abstract Classes and Class Members


Class dapat dinyatakan sebagai abstrak dengan meletakkan keyword abstrak sebelum definisi class. Sebagai contoh:
public abstract class A
{
    // Class members here.
}
Class abstrak tidak bisa di instantiasikan. Tujuan class abstrak adalah untuk memberikan definisi umum tentang base class yang dapat diikuti beberapa class drived.

Sebagai contoh, sebuah Library class dapat mendefinisikan class abstrak yang digunakan sebagai parameter untuk banyak fungsinya, dan meminta pemrogram menggunakan library tersebut untuk memberikan penerapan class mereka sendiri dengan menciptakan class turunan.

Class abstrak juga bisa mendefinisikan metod abstrak. Hal ini dilakukan dengan menambahkan keyword abstrak sebelum tipe data metod return. Sebagai contoh:
public abstract class A
{
    public abstract void DoWork(int i);
}
Metod abstrak tidak memiliki implementasi, sehingga definisi metod diikuti oleh titik koma, bukan blok metode normal. Class turunan dari class abstrak harus menerapkan semua metod abstrak.

Ketika class abstrak inheritance metod virtual dari base class, class abstrak dapat menggantikan metod virtual dengan metode abstrak. Sebagai contoh:
// compile with: /target:library
public class D
{
    public virtual void DoWork(int i)
    {
        // Original implementation.
    }
}

public abstract class E : D
{
    public abstract override void DoWork(int i);
}

public class F : E
{
    public override void DoWork(int i)
    {
        // New implementation.
    }
}
Jika metod virtual dinyatakan abstrak, masih virtual ke class yang inheritance dari class abstrak. Class yang tidak dapat mengakses DoWork di class D. Dengan cara ini, class abstrak dapat memaksa class turunan untuk menyediakan implementasi metode baru untuk metode virtual.

  • Sealed Classes and Class Members

Class dapat dinyatakan sebagai sealed dengan meletakkan keyword sealed sebelum definisi class. Sebagai contoh:
public sealed class D
{
    // Class members here.
}
Class yang sealed tidak dapat digunakan sebagai base class. Untuk alasan ini, tidak bisa juga menjadi class abstrak. Class tertutup mencegah derivasi. Karena mereka tidak dapat digunakan sebagai base class, beberapa pengoptimalan run-time dapat membuat member class yang dipanggil disaled sedikit lebih cepat.

Sebuah metod, indexer, properti, atau event, pada class turunan yang mengesampingkan member virtual base class dapat menyatakan member tersebut sealed. Ini meniadakan aspek virtual member untuk class turunan selanjutnya. Hal ini dilakukan dengan meletakkan keyword yang sealed sebelum mengesampingkan keyword dalam deklarasi member class. Sebagai contoh:
public class D : C
{
    public sealed override void DoWork() { }
}
Previous
Next Post »