Có thể ẩn các nhà xây dựng parameterless từ một người dùng trong C#ẩn parameterless constructor trên struct
Tôi muốn buộc họ phải luôn luôn sử dụng các nhà xây dựng với các thông số
ví dụ lớp này Chức
public struct Position
{
private readonly int _xposn;
private readonly int _yposn;
public int Xposn
{
get { return _xposn; }
}
public int Yposn
{
get { return _yposn; }
}
public Position(int xposn, int yposn)
{
_xposn = xposn;
_yposn = yposn;
}
}
Tôi chỉ muốn người dùng có thể mới lên một vị trí bằng cách xác định x và y phối
Tuy nhiên, các nhà xây dựng parameterless là LUÔN availiable
Tôi không thể làm cho nó tin . Hoặc thậm chí xác định nó như nào
Tôi đã đọc Why can't I define a default constructor for a struct in .NET?
nhưng nó doesnt thực sự giúp
Nếu đây là không thể - là những cách tốt nhất để phát hiện nếu Chức Tôi được thông qua có giá trị?
Kiểm tra tính hiệu quả của từng trường thuộc tính? Có cách nào không?
cảm ơn
Tôi thấy điều này như là một vấn đề khả năng sử dụng nhiều hơn bất cứ điều gì khác. Hàm khởi tạo mặc định có thể tạo một đối tượng _valid_, nhưng đối với nhiều cấu trúc, nó sẽ không là những gì người dùng sẽ muốn hoặc mong đợi. Tuy nhiên một số người sẽ sử dụng hàm tạo mặc định đó chỉ vì đó là tùy chọn đầu tiên mà IDE của họ cung cấp cho họ.Và sau đó họ sẽ có những lỗi gây nhầm lẫn gây ra bởi các cấu trúc zero-out cần phải được lấp đầy với dữ liệu, hoặc họ sẽ lãng phí thời gian cố gắng tìm ra lý do tại sao họ không thể thiết lập các thuộc tính trên một cấu trúc bất biến. Từ quan điểm thiết kế API, tôi muốn nó có thể ẩn hàm khởi tạo mặc định. –
+1 @MB. Một hàm tạo mặc định riêng sẽ giúp, ngay cả khi một "kẻ ngốc" được xác định có thể làm việc xung quanh nó. Là một muối C++, tôi nghĩ 'riêng tư' là một gợi ý không tự bắn mình vào chân, luôn luôn có một con trỏ xung quanh bằng cách sử dụng con trỏ. Và ngữ nghĩa mảng có thể được quan tâm bằng cách không cho phép các mảng của các cấu trúc như vậy được tạo ra. –
@roryapL Cố định, cảm ơn. –