Sự khác biệt giữa lớp tĩnh và lớp kín


150
  1. Có lớp nào được thực hiện trong lớp tĩnh không? có nghĩa:

    static class ABC : Anyclass
  2. Có lớp nào có thể được kế thừa trong cả lớp kín và lớp tĩnh không?
    có nghĩa:

    static class ABC : AClass {}

    sealed class ABC : AClass {}

Tôi có thể sai ở một mức độ nào đó?


staticthực sự không có gì để làm vớisealed
ken2k

1
Nhưng @ ken2k, các lớp tĩnh được niêm phong theo mặc định trong C #. Phải không? các lớp tĩnh không tham gia kế thừa gì cả.
RBT

Câu trả lời:


654

Điều này có thể giúp bạn:

+--------------+---+-------------------------+------------------+---------------------+
|  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          |
+--------------+---+-------------------------+------------------+---------------------+

1
Tuyệt vời. Cảm ơn đã phản hồi nhanh chóng @HosseinNarimaniRad. Tôi đã nâng cấp bạn vào buổi sáng vì thông tin là chính xác nhưng đó chỉ là một vấn đề định dạng. Btw, câu trả lời của bạn xứng đáng là câu trả lời được chấp nhận từ thời điểm nó được đăng nhưng có vẻ như chúng ta sẽ phải chờ thêm cho điều đó :)
RBT

Sắp xếp thật thú vị khi nghĩ về các loại khác, dựa trên điều này. Giống như một số root classcó thể được kế thừa và khởi tạo, nhưng không thể kế thừa. Không chắc tại sao điều đó lại hữu ích, nhưng vẫn vậy
AustinWBryan

static class Foo : object { }là hợp lệ, nhưng về cơ bản là static class Foo { }.
themefield

39

Nói một cách đơn giản

Lớp tĩnh

Một lớp có thể được khai báo tĩnh, chỉ ra rằng nó chỉ chứa các thành viên tĩnh. Không thể tạo các thể hiện của một lớp tĩnh bằng từ khóa mới. Các lớp tĩnh được tải tự động bởi thời gian chạy ngôn ngữ chung .NET Framework (CLR) khi chương trình hoặc không gian tên chứa lớp được tải.

Lớp kín

Một lớp kín có thể được sử dụng như một lớp cơ sở. Các lớp kín được sử dụng chủ yếu để ngăn chặn dẫn xuất. Bởi vì chúng không bao giờ có thể được sử dụng như một lớp cơ sở, một số tối ưu hóa thời gian chạy có thể làm cho việc gọi các thành viên của lớp niêm phong nhanh hơn một chút.


19

Bạn có thể để một sealedlớp kế thừa từ một lớp khác, nhưng bạn không thể thừa kế từ một sealedlớp:

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

Một staticlớp không thể kế thừa từ các lớp khác.


3

Bạn có thể chỉ cần phân biệt cả hai như:

       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

3

Câu trả lời đơn giản là một lớp kín không thể được sử dụng như một lớp cơ sở .

Tôi đang cố gắng chỉ cho bạn lớp niêm phong là một lớp dẫn xuất trong đoạn mã dưới đây

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

và một tính năng niêm phong khác chỉ có thể truy cập bằng ví dụ từ nó. (bạn không thể kế thừa từ nó)

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

    }
}

1

Các lớp kín:

  1. Có thể tạo phiên bản, nhưng không thể kế thừa
  2. Có thể chứa các thành viên tĩnh cũng như không tĩnh.

Các lớp tĩnh:

  1. Không thể tạo phiên bản của chúng, cũng không thể kế thừa chúng
  2. Chỉ có thể có thành viên tĩnh.

0

1 - Không, bạn không thể thực hiện một lớp tĩnh.

2 - Không, bạn không thể kế thừa từ một lớp tĩnh hoặc niêm phong


4
Có thể là bạn có thể thêm một chút giải thích về điều đó.
abdul
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.