Bagikan melalui


Kelas Abstrak dan Sealed serta Anggota Kelas (Panduan Pemrograman C#)

Kata kunci abstrak memungkinkan Anda membuat kelas dan anggota kelas yang tidak lengkap dan harus diimplementasikan dalam kelas turunan.

Kata kunci yang disegel memungkinkan Anda mencegah pewarisan kelas atau anggota kelas tertentu yang sebelumnya ditandai virtual.

Kelas Abstrak dan Anggota Kelas

Kelas dapat dideklarasikan sebagai abstrak dengan menempatkan kata kunci abstract sebelum definisi kelas. Contohnya:

public abstract class A
{
    // Class members here.
}

Kelas abstrak tidak dapat diwakilkan. Tujuan dari kelas abstrak adalah untuk memberikan definisi umum dari kelas dasar yang dapat dibagikan oleh beberapa kelas turunan. Misalnya, pustaka kelas dapat mendefinisikan kelas abstrak yang digunakan sebagai parameter untuk banyak fungsinya, dan mengharuskan pemrogram menggunakan pustaka tersebut untuk menyediakan implementasi kelas mereka sendiri dengan membuat kelas turunan.

Kelas abstrak juga dapat menentukan metode abstrak. Ini dicapai dengan menambahkan kata kunci abstract sebelum jenis pengembalian metode. Contohnya:

public abstract class A
{
    public abstract void DoWork(int i);
}

Metode abstrak tidak memiliki implementasi, sehingga definisi metode diikuti dengan titik koma alih-alih blok metode normal. Kelas turunan dari kelas abstrak harus menerapkan semua metode abstrak. Ketika kelas abstrak mewarisi metode virtual dari kelas dasar, kelas abstrak dapat mengambil alih metode virtual dengan metode abstrak. Contohnya:

// 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.
    }
}

virtual Jika metode dideklarasikan abstract, metode tersebut masih virtual untuk kelas apa pun yang mewarisi dari kelas abstrak. Kelas yang mewarisi metode abstrak tidak dapat mengakses implementasi asli metode —dalam contoh sebelumnya, DoWork pada kelas F tidak dapat memanggil DoWork di kelas D. Dengan cara ini, kelas abstrak dapat memaksa kelas turunan untuk menyediakan implementasi metode baru untuk metode virtual.

Kelas dan Anggota Kelas yang Tertutup

Kelas dapat dinyatakan sebagai disegel dengan menempatkan kata kunci sealed sebelum definisi kelas. Contohnya:

public sealed class D
{
    // Class members here.
}

Kelas yang disegel tidak dapat digunakan sebagai kelas dasar. Untuk alasan ini, itu juga tidak bisa menjadi kelas abstrak. Kelas yang disegel mencegah derivasi. Karena mereka tidak dapat digunakan sebagai kelas dasar, beberapa pengoptimalan run-time dapat membuat panggilan anggota kelas tersegel sedikit lebih cepat.

Metode, pengindeks, properti, atau peristiwa dalam kelas turunan yang menggantikan anggota virtual kelas dasar dapat mendeklarasikan anggota tersebut sebagai 'sealed'. Ini meniadakan aspek virtual anggota untuk kelas turunan lebih lanjut. Hal ini dilakukan dengan menempatkan sealed kata kunci sebelum kata kunci override dalam deklarasi anggota kelas. Contohnya:

public class D : C
{
    public sealed override void DoWork() { }
}

Lihat juga