2015-10-08 24 views
5

Các cách để tạo lớp không thể diễn đạt là gì? Một cách là khai báo nó như là một lớp trừu tượng. Có thể làm điều đó bằng cách làm cho hàm tạo lớp là riêng tư không? Là một lớp niêm phong, không nhanh? Và, có cách nào khác để làm điều đó trong C#?Các cách để khai báo một lớp không thể khởi tạo là gì?

+1

những gì bạn muốn làm với các lớp học? – Jay

+0

Trả lời = Lớp tĩnh – MajkeloDev

+0

Lớp trừu tượng, lớp tĩnh không thể được khởi tạo – Dragon

Trả lời

7

Đánh dấu một lớp là trừu tượng hoặc tĩnh (chúng loại trừ lẫn nhau) là hai cách duy nhất. Đánh dấu tất cả các hàm xây dựng là riêng tư không làm cho lớp không thể phục hồi vì lớp đó vẫn có thể xây dựng chính nó và những người khác có thể làm điều đó thông qua sự phản chiếu.

+0

Là một lớp được niêm phong, không khả thi? – kakkarot

+0

@madmax lớp kín là không thể kế thừa. –

+0

Không, không thể kế thừa một lớp kín. Nó không nói gì về tính tức thời – kai

1

Do các lớp trừu tượng và tĩnh khác trả lời không thể khởi tạo được, tuy nhiên một lớp với hàm tạo riêng có thể bằng cách sử dụng hàm thành viên công khai. Đây là cách hoạt động của mô hình singleton

2

Chỉ có static trông giống như giải pháp hoàn chỉnh ở đây vì lớp học vẫn có thể được khởi tạo khi cá thể lớp kế thừa từ nó được khởi tạo. Hãy xem xét trường hợp:

abstract class A { } 

class B : A { } 

somewhere in code : 

B instance = new B(); // this creates instance of class A as well 

P.S. Lúc đầu tôi dù rằng abstract sealed có thể là giải pháp cho vấn đề này là tốt nhưng nó không có ý nghĩa nhiều để sử dụng một cấu trúc như vậy nên nó thậm chí không biên dịch:

Error 1 'A': an abstract class cannot be sealed or static D:\Projects\TEST\Testapp\Program.cs 15 27 ITT.Domain 
+0

Tôi đồng ý. Trong. Net bạn có thể nhận được một cá thể Stream. Tất nhiên đó sẽ luôn là một thể hiện của một phân lớp của Stream. Nhưng đối với mã cả bên trong lớp Stream và bên ngoài lớp Stream thì cá thể đó vẫn là một cá thể. –

+0

Dấu niêm phong trừu tượng là gì? Ai đó có thể giải thích nó là gì? – kakkarot

+0

tốt đẹp đề cập đến nó nhưng trừu tượng niêm phong là không thể. –

0

lớp nội chỉ hiển thị bên trong hội đồng của bạn và do đó không thể được khởi tạo bên ngoài hội đồng này.

Nhưng theo như tôi biết, bạn vẫn có thể tạo một cá thể thông qua sự phản chiếu. bạn có thể tắt phản chiếu qua ReflectionPermission Class

Như đã đề cập ở trên, bạn có thể tuyên bố nó là trừu tượng hoặc thêm phương pháp trừu tượng.

Nếu bạn chỉ muốn khai báo hợp đồng, bạn có thể sử dụng giao diện, nhưng đó không phải là một lớp học nào cả.

kín có nghĩa là bạn không thể kế thừa lớp này

singleton lớp chỉ có thể được tạo ra một lần cho mỗi ứng dụng singleton

thấy sealed (C# reference)

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