2009-11-05 28 views
25

Nếu một hàm tạo công khai trong một lớp trừu tượng chỉ có thể được gọi bởi các lớp dẫn xuất của chúng, nó nên có chức năng tương đương với một hàm tạo được bảo vệ. Đúng?Whats tiện ích của các nhà thầu công khai trong các lớp trừu tượng trong C#?

Có sự khác biệt nào trong việc tuyên bố một hàm tạo công khai, thay vì một hàm dựng được bảo vệ, trong lớp trừu tượng không? Bạn sẽ sử dụng nó để làm gì? Tại sao trình biên dịch không khiếu nại?

Cảm ơn

Trả lời

21

Hoàn toàn chính xác. Bạn nên ưu tiên xây dựng được bảo vệ.

EDIT: không trình biên dịch không phàn nàn, nhưng các công cụ như FxCop (& mã phân tích) làm. Tôi tin rằng có một số thủ thuật phản chiếu kỳ lạ mà bạn có thể làm với các nhà xây dựng công khai trên các lớp trừu tượng, nhưng từ quan điểm nơi bạn chỉ cung cấp chức năng lớp cơ sở cho các nhà phát triển khác viết các lớp con, gắn bó với trình xây dựng được bảo vệ.

+0

đã đồng ý. Điều này là có chi tiết hơn: http://stackoverflow.com/questions/2700256/why-cant-create-object-of-an-abstract-class –

2

Có, bạn là đúng, nhà xây dựng công khai thực tế không sử dụng trong lớp học có thể bỏ qua khi bạn không thể tạo chúng. Tuy nhiên, trình biên dịch sẽ không phàn nàn bởi vì như vậy có rất nhiều thứ vô ích bạn có thể viết trong ngữ cảnh của C#, nhưng nó sẽ không thể kiểm tra ý nghĩa logic của nó, nó chỉ có thể kiểm tra các quy tắc phân tích mà nó được đặt cho .

Và chắc chắn những người tạo C# đã tập trung vào việc tạo ngữ pháp biên dịch (quy tắc) thực sự có hại và vi phạm việc sử dụng ngôn ngữ.

4

Bạn là chính xác. Một hàm khởi tạo công khai trong lớp trừu tượng có chức năng tương đương với một hàm tạo được bảo vệ.

Tôi thích sử dụng hàm tạo được bảo vệ trong trường hợp này.

Trong khi, đúng là trình biên dịch sẽ không phàn nàn về việc bạn làm điều này, trình biên dịch sẽ phàn nàn về việc cố gắng tạo ra một thể hiện của lớp trừu tượng. Visual Studio cũng đủ thông minh để không cung cấp Intellisense nếu bạn cố gắng khởi tạo lớp trừu tượng.

+0

Có một số trường hợp cạnh với sự phản ánh có thể được đơn giản hóa bằng cách tạo ra các lớp khởi tạo trừu tượng công chúng ... nhưng chúng đặc biệt hiếm. Tôi thường đồng ý rằng các nhà xây dựng trong các lớp trừu tượng nên được bảo vệ (hoặc riêng tư nếu chúng được gọi bởi các quá tải xây dựng khác). – LBushkin

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