2013-04-25 63 views
95
  1. Có lớp nào được triển khai trong lớp tĩnh không? có nghĩa là:Sự khác biệt về lớp tĩnh và kín

    static class ABC : Anyclass 
    
  2. Có lớp nào có thể được kế thừa trong cả lớp bị khóa và lớp tĩnh?
    phương tiện:

    static class ABC : AClass {} 
    

    sealed class ABC : AClass {} 
    

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

+8

Bạn quên thẻ 'C# -2.0'. –

+0

'static' thực sự không liên quan gì đến' sealed' – ken2k

+0

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 vào kế thừa. – RBT

Trả lời

13

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

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

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

412

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

tại sao điều này không được chấp nhận là câu trả lời? – Immortal

+0

Tôi thứ hai @Adelin để hoán đổi các tiêu đề cột với các giá trị trong cột đầu tiên. Tôi phải điều chỉnh lại mô hình tinh thần của mình một lúc trong khi cố suy ra thông tin được mô tả trong bảng. – RBT

+1

@RBT bây giờ các tiêu đề cột được đảo ngược với các hàng –

31

Nói cách đơn giản

tĩnh Lớp

Một lớp học có thể được khai báo tĩnh, chỉ ra rằng nó chỉ chứa thành viên tĩnh. Không thể tạo các trường hợp của lớp tĩnh bằng từ khóa mới. Các lớp tĩnh được nạp 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 nạp.

Sealed Lớp

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

1

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

Tôi đang cố gắng để cho bạn thấy Sealed Class là một lớp được thừa kế trong Bộ luật Dưới

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

và Một tính năng Sealed là Chỉ truy cập Với Instance từ nó. Ví dụ

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

    } 
} 

lớp Sealed được sử dụng để hạn chế các tính năng thừa kế của lập trình hướng đối tượng. Khi một lớp được định nghĩa là một lớp được niêm phong, lớp đó không thể được kế thừa.Trong C#, công cụ sửa đổi niêm phong được sử dụng để định nghĩa một lớp như là niêm phong. Trong Visual Basic .NET từ khóa NotInheritable phục vụ mục đích niêm phong.

0

1 - Không, bạn không thể triển khai lớp tĩnh.

2 - Không, bạn không thể được kế thừa từ lớp tĩnh hoặc bị đóng kín

+1

Có thể bạn có thể thêm một chút giải thích về điều đó. – abdul

Các vấn đề liên quan