Bagikan melalui


disegel (Referensi C#)

Saat Anda menerapkan pengubah sealed ke kelas, itu mencegah kelas lain mewarisi dari kelas tersebut. 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. Dengan menggunakan pendekatan ini, Anda memungkinkan pengembang untuk mendapatkan kelas dari kelas Anda sambil mencegahnya mengambil alih metode atau properti virtual tertentu.

Referensi bahasa C# mendokumentasikan versi bahasa C# yang paling baru dirilis. Ini juga berisi dokumentasi awal untuk fitur dalam pratinjau publik untuk rilis bahasa yang akan datang.

Dokumentasi mengidentifikasi fitur apa pun yang pertama kali diperkenalkan dalam tiga versi terakhir bahasa atau dalam pratinjau publik saat ini.

Petunjuk / Saran

Untuk menemukan kapan fitur pertama kali diperkenalkan di C#, lihat artikel tentang riwayat versi bahasa C#.

Dalam contoh berikut, Z mewarisi dari Y tetapi Z tidak dapat mengambil alih fungsi F virtual yang dinyatakan masuk dan disegel X 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"); }
}

Ketika Anda menentukan metode atau properti baru di kelas, Anda dapat mencegah mengambil alih kelas dengan tidak mendeklarasikannya sebagai virtual . Saat Anda mengambil alih anggota yang virtual dideklarasikan dalam jenis dasar, Anda dapat mencegah mengambil alih jenis tersebut dengan menggunakan sealed kata kunci seperti yang ditunjukkan dalam contoh berikut:

public sealed override string ToString() => Value;

Ini adalah kesalahan untuk menggunakan pengubah abstrak dengan kelas tertutup, karena kelas abstrak harus diwariskan oleh kelas yang menyediakan implementasi metode atau properti abstrak.

Saat Anda menerapkan pengubah sealed ke metode atau properti, selalu gunakan dengan ambil alih.

Karena struktur disegel secara implisit, Anda tidak dapat mewarisinya.

Untuk informasi selengkapnya, lihat Warisan.

Untuk contoh selengkapnya, lihat Kelas Abstrak dan Tersegel dan 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'

Untuk menentukan apakah akan menyegel kelas, metode, atau properti, umumnya pertimbangkan dua poin berikut:

  • Manfaat potensial yang mungkin diperoleh kelas melalui kemampuan untuk menyesuaikan kelas Anda.
  • Potensi bahwa kelas turunan dapat memodifikasi kelas Anda sed sehingga mereka tidak lagi bekerja 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