2012-02-14 47 views
11

Làm thế nào có thể lớp trong C# có thể không có các hàm tạo được định nghĩa? Ví dụ tôi có một lớpLớp C# không có hàm tạo

internal class TextStyle 
{ 
    internal string text = ""; 
    internal Font font = new Font("Arial", 8); 
    internal Color color = Color.Black; 
} 

Và trong các mã lớp này được khởi tạo như

TextStyle textParameters = new TextStyle(); 

Trả lời

31

Nếu bạn không khai báo bất kỳ nhà thầu cho một lớp học không tĩnh, trình biên dịch cung cấp một công (hoặc được bảo vệ cho các lớp trừu tượng) constructor parameterless cho bạn. lớp học của bạn một cách hiệu quả có một constructor của:

public TextStyle() 
{ 
} 

này được mô tả trong phần 10.11.4 của C# 4 spec:

Nếu một lớp không chứa khai báo constructor dụ, một constructor dụ mặc định là tự động được cung cấp. Hàm khởi tạo mặc định đó đơn giản gọi hàm khởi tạo parameterless của lớp cơ sở trực tiếp. Nếu lớp cơ sở trực tiếp không có một hàm tạo instance parameterless có thể truy cập, thì một lỗi biên dịch sẽ xảy ra. Nếu lớp là trừu tượng, thì khả năng truy cập được khai báo cho hàm tạo mặc định là protected. Nếu không, khả năng truy cập được khai báo cho hàm tạo mặc định là public.

Các lớp chỉ trong C# mà không có bất kỳ constructors dụ là lớp tĩnh, và họ không có thể có nhà xây dựng.

0

Có một constrctor trống tiềm ẩn nếu bạn không xác định hàm tạo khác.

+3

-1; điều này có hiệu quả chỉ lặp lại những gì Jon Skeet đã viết 40 giây trước đó, nhưng với lỗi chính tả, với chi tiết ít hơn, và không có một tài liệu tham khảo có thẩm quyền. Câu trả lời này không thêm bất kỳ giá trị nào vào trang. –

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