tertutup (Referensi C#)

Saat diterapkan ke kelas, pengubah sealed mencegah kelas lain mewarisinya. Dalam contoh berikut, kelas B mewarisi dari kelas A, tetapi tidak ada kelas yang dapat mewarisi dari kelas B.

class A {}
sealed class B : A {}

Anda juga dapat menggunakan pengubah sealed pada metode atau properti yang mengambil alih metode atau properti virtual di kelas dasar. Ini memungkinkan Anda mengizinkan kelas untuk menurunkan dari kelas Anda dan mencegahnya mengesampingkan metode atau properti virtual tertentu.

Contoh

Dalam contoh berikut, Z mewarisi dari Y tetapi Z tidak dapat mengambil alih fungsi virtual F yang dinyatakan dalam X dan disegel dalam Y.

class X
{
    protected virtual void F() { Console.WriteLine("X.F"); }
    protected virtual void F2() { Console.WriteLine("X.F2"); }
}

class Y : X
{
    sealed protected override void F() { Console.WriteLine("Y.F"); }
    protected override void F2() { Console.WriteLine("Y.F2"); }
}

class Z : Y
{
    // Attempting to override F causes compiler error CS0239.
    // protected override void F() { Console.WriteLine("Z.F"); }

    // Overriding F2 is allowed.
    protected override void F2() { Console.WriteLine("Z.F2"); }
}

Saat Anda menentukan metode atau properti baru di kelas, Anda dapat mencegah kelas turunan mengambil alih dengan tidak mendeklarasikannya sebagai virtual.

Suatu kesalahan untuk menggunakan pengubah abstrak dengan kelas yang disegel, karena kelas abstrak harus diwarisi oleh kelas yang menyediakan implementasi metode atau properti abstrak.

Ketika diterapkan ke metode atau properti, pengubah sealed harus selalu digunakan dengan pengambilalihan.

Karena struktur secara implisit disegel, mereka tidak dapat diwariskan.

Untuk informasi selengkapnya, lihat Warisan.

Untuk informasi selengkapnya, lihat Kelas Abstrak dan Tersegel serta Anggota Kelas.

sealed class SealedClass
{
    public int x;
    public int y;
}

class SealedTest2
{
    static void Main()
    {
        var sc = new SealedClass();
        sc.x = 110;
        sc.y = 150;
        Console.WriteLine($"x = {sc.x}, y = {sc.y}");
    }
}
// Output: x = 110, y = 150

Dalam contoh sebelumnya, Anda mungkin mencoba mewarisi dari kelas yang disegel dengan menggunakan pernyataan berikut:

class MyDerivedC: SealedClass {} // Error

Hasilnya adalah pesan kesalahan:

'MyDerivedC': cannot derive from sealed type 'SealedClass'

Keterangan

Untuk menentukan apakah akan menyegel kelas, metode, atau properti, umumnya Anda harus mempertimbangkan dua poin berikut:

  • Manfaat potensial yang mungkin diperoleh kelas melalui kemampuan untuk menyesuaikan kelas Anda.

  • Potensi bahwa kelas turunan dapat memodifikasi kelas Anda sedemikian rupa sehingga kelas tersebut tidak akan lagi berfungsi dengan benar atau seperti yang diharapkan.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.

Lihat juga