Perbedaan kelas statis dan tertutup

150
  1. Apakah ada kelas yang diimplementasikan di kelas statis? cara:

    static class ABC : Anyclass
  2. Apakah ada kelas yang bisa diwariskan di kelas tertutup dan kelas statis?
    cara:

    static class ABC : AClass {}

    Dan

    sealed class ABC : AClass {}

Bolehkah saya salah dalam batas tertentu?

Saurabh Mahajan
sumber
staticbenar-benar tidak ada hubungannya dengansealed
ken2k
1
Tapi @ ken2k, kelas statis disegel secara default di C #. Bukan? kelas statis sama sekali tidak berpartisipasi dalam warisan.
RBT

Jawaban:

654

Ini dapat membantu Anda:

+--------------+---+-------------------------+------------------+---------------------+
|  Class Type  |   | Can inherit from others | Can be inherited | Can be instantiated | 
|--------------|---|-------------------------+------------------+---------------------+
| normal       | : |          YES            |        YES       |         YES         |
| abstract     | : |          YES            |        YES       |         NO          |
| sealed       | : |          YES            |        NO        |         YES         |
| static       | : |          NO             |        NO        |         NO          |
+--------------+---+-------------------------+------------------+---------------------+
Hossein Narimani Rad
sumber
1
Luar biasa. Terima kasih atas respons cepat @HosseinNarimaniRad. Saya telah mengangkat Anda di pagi hari karena informasinya benar tetapi itu hanya masalah format. Btw, jawaban Anda layak menjadi jawaban yang diterima sejak posting itu dikirim, tetapi sepertinya kami harus menunggu lebih lama untuk itu :)
RBT
Sortir sudah menarik untuk memikirkan jenis lain, berdasarkan ini. Seperti beberapa root classyang dapat diwarisi dan dipakai, tetapi tidak dapat diwarisi. Tidak yakin mengapa itu akan berguna, tapi tetap saja
AustinWBryan
static class Foo : object { }valid, tetapi pada dasarnya static class Foo { }.
themefield
39

Dengan kata-kata sederhana

Kelas Statis

Kelas dapat dideklarasikan statis, yang menunjukkan bahwa itu hanya berisi anggota statis. Tidak mungkin membuat instance dari kelas statis menggunakan kata kunci baru. Kelas statis dimuat secara otomatis oleh .NET Framework common language runtime (CLR) ketika program atau namespace yang memuat kelas tersebut dimuat.

Kelas Tertutup

Kelas yang disegel tidak bisa digunakan sebagai kelas dasar. Kelas tertutup terutama digunakan untuk mencegah derivasi. Karena mereka tidak pernah dapat digunakan sebagai kelas dasar, beberapa optimasi run-time dapat membuat memanggil anggota kelas yang disegel sedikit lebih cepat.

Parimal Raj
sumber
19

Anda dapat membiarkan sealedmewarisi kelas dari kelas lain, tetapi Anda tidak dapat mewarisi dari sebuah sealedkelas:

sealed class MySealedClass : BaseClass // is ok
class MyOtherClass : MySealedClass     // won't compile

Sebuah statickelas tidak dapat mewarisi dari kelas-kelas lain.

C.Evenhuis
sumber
3

Anda dapat membedakan keduanya sebagai:

       Sealed Class       |        Static Class
--------------------------|-------------------------
it can inherit From other | it cannot inherit From other
classes but cannot be     | classes as well as cannot be
inherited                 | inherited
Abdul
sumber
3

Jawaban sederhana adalah kelas yang disegel tidak dapat digunakan sebagai kelas dasar .

Saya mencoba menunjukkan kepada Anda bahwa kelas yang disegel adalah kelas turunan dalam kode di bawah ini

 public sealed class SealedClass : ClassBase
{
    public override void Print()
    {
        base.Print();
    }
}

dan fitur lain yang disegel hanya dapat diakses dengan instance darinya (Anda tidak dapat mewarisi darinya)

 class Program
{
    static void Main(string[] args)
    {
        SealedClass objSeald = new SealedClass();
        objSeald.Name = "Blah blah balh";
        objSeald.Print();

    }
}
Amin Saadati
sumber
1

Kelas tertutup:

  1. Dapat membuat instance, tetapi tidak dapat mewarisi
  2. Dapat berisi anggota statis maupun non-statis.

Kelas statis:

  1. Tidak dapat membuat instance mereka, atau mewarisi mereka
  2. Hanya dapat memiliki anggota statis.
Vishal Verma
sumber
0

1 - Tidak, Anda tidak dapat menerapkan kelas statis.

2 - Tidak, Anda tidak dapat mewarisi dari kelas statis atau tertutup

Smaiil
sumber
4
Mungkin Anda bisa menambahkan sedikit penjelasan tentang itu.
abdul