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ì?
Trả lời
Đá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.
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
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
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ể. –
Dấu niêm phong trừu tượng là gì? Ai đó có thể giải thích nó là gì? – kakkarot
tốt đẹp đề cập đến nó nhưng trừu tượng niêm phong là không thể. –
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
- 1. "where" có nghĩa là gì trong khai báo lớp C#?
- 2. Tại sao chúng ta không thể khởi tạo thành viên lớp học khi khai báo?
- 3. Lớp 'Phòng' là trừu tượng; không thể được khởi tạo
- 4. ý nghĩa của khai báo kiểu `Lớp` là gì?
- 5. Cách khai báo tham chiếu và khởi tạo sau
- 6. Không thể khởi tạo org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants lớp
- 7. Khởi tạo một lớp bằng trình khởi tạo siêu lớp
- 8. Khởi tạo mảng tại khai báo
- 9. Từ khóa "where" trong khai báo lớp học là gì?
- 10. Android Không thể khởi tạo một hoặc nhiều lớp
- 11. Không thể khởi tạo phân mảnh đảm bảo tên lớp tồn tại, là công khai và có một hàm tạo trống rỗng là công khai
- 12. java.lang.NoClassDefFoundError: Không thể khởi tạo lớp org.apache.poi.openxml4j.opc.internal.marshallers.ZipPackagePropertiesMarshaller
- 13. java.lang.NoClassDefFoundError: Không thể khởi tạo lớp java.awt.Toolkit
- 14. Nếu một lớp được khai báo là cuối cùng thì cần phải khai báo các phương thức như là số
- 15. Không thể khởi tạo lớp net.sf.cglib.proxy.Enhancer
- 16. Cách thích hợp để khai báo một thuộc tính là sai là gì?
- 17. Cách tốt nhất để tạo lớp không thể thực hiện được là gì?
- 18. Không thể khai báo các thành viên cá thể trong một lớp tĩnh trong C#
- 19. "NoClassDefFoundError: Không thể khởi tạo lớp" lỗi
- 20. Có thể khai báo một lớp mà không cần triển khai nó không? (C++)
- 21. Lỗi: Không thể khởi tạo lớp com.android.sdklib.repository.AndroidSdkHandler
- 22. Nhận ‘m_Mutex’ được khai báo là tham chiếu nhưng không phải lỗi được khởi tạo
- 23. Tôi có thể khởi tạo một lớp bằng cách sử dụng đối tượng lớp không? Điều gì về Constructors?
- 24. Tôi có nên khởi tạo các biến mẫu trên khai báo hoặc trong hàm tạo không?
- 25. Các lớp sau đây không thể được khởi tạo: - com.facebook.widget.LoginButton
- 26. Có thể khởi tạo một mảng sau khi khai báo trong C?
- 27. Các lớp sau đây không thể được khởi tạo: android.support.design.widget.CoordinatorLayout
- 28. Tuyên bố khai báo và khởi tạo C++ là "", một biểu thức?
- 29. Không thể khởi tạo lớp com.amazonaws.services.sqs.AmazonSQSClient
- 30. Các lớp sau không thể được khởi tạo: - com.google.android.gms.plus.PlusOneButton
những gì bạn muốn làm với các lớp học? – Jay
Trả lời = Lớp tĩnh – MajkeloDev
Lớp trừu tượng, lớp tĩnh không thể được khởi tạo – Dragon