Chỉnh sửa:Hóa ra tôi đã bỏ sót điều gì đó hiển nhiên, nhưng tôi sẽ để câu hỏi mở trong trường hợp người khác phạm phải sai lầm rõ ràng. Nhờ những người đã chỉ ra nóXem phần dưới để được giải thích.Việc thêm thuộc tính vào giao diện có ngăn chặn việc tạo "bộ" riêng tư/được bảo vệ trong các loại có nguồn gốc không?
Có thể đặt không công khai trên thuộc tính ghi đè thuộc tính giao diện không?
Có lẽ tôi đang có một khoảnh khắc ngu ngốc, nhưng có vẻ như tôi có một tài sản được định nghĩa trong giao diện đòi hỏi rằng không có lớp phát sinh nào có thể cung cấp bất kỳ bộ công khai nào cho thuộc tính nói trên.
Ví dụ:
interface IField
{
bool IsValid { get; }
}
... và vì tính chất giao diện có thể không có khả năng tiếp cận bổ nghĩa là:
class Field : IField
{
public override bool IsValid { get; protected set; }
}
... sẽ không thể bất chấp thực tế rằng nó đáp ứng giao diện yêu cầu khái niệm.
IMO điều này có ý nghĩa tiêu cực lớn đối với việc đóng gói có thể được thực hiện thông qua các thuộc tính không công khai, và ngăn chặn một số patters sử dụng phổ biến cho Propertes.
Tôi biết rằng bạn có thể tạo thành viên SetIsValid không công khai sửa đổi một cửa hàng sao lưu phổ biến, nhưng điều đó sẽ tạo ra một mẫu không phù hợp và thêm tiếng ồn mã khác là không cần thiết.
Tôi đã bỏ lỡ điều gì đó chưa?
Edit: Có, tôi có mất cái gì
Tôi đang thay đổi mã của người khác vào lúc này và chỉ nhận ra rằng lớp tôi đã vật lộn với thực hiện giao diện và có nguồn gốc từ một lớp cơ sở. Và tôi mới đến C# Đó là những gì gây ra sự nhầm lẫn ghi đè.
lớp thực tế trông giống như:
class Field : IField, BaseField
{
public override bool IsValid { get; protected set; }
}
... nơi BaseField thực hiện giao diện là tốt, nhưng đã không thực hiện các thiết lập.
Bạn có cố gắng biên dịch ví dụ của mình trước không? Giao diện mẫu của bạn không chính xác vì bạn có công cụ sửa đổi công khai, điều này là bất hợp pháp. Ngoài ra, định nghĩa lớp học của bạn không chính xác vì bạn có từ khóa ghi đè trên định nghĩa giao diện, đó là bất hợp pháp.Một khi bạn sửa chữa cho hai điều đó, nó biên dịch tốt và sẽ hoạt động như bạn mong muốn. – Nick
Công chúng trong giao diện là một lỗi đánh máy. – Catskul
Có, bạn đang có một trong những khoảnh khắc đó. –