Hãy xem xét các loại sau đây:Là một thành viên nội bộ và được bảo vệ có thể có trong C#?
public class Vehicle { ... }
public class Coverage { ... }
public class VehicleList : IEnumerable<Vehicle> { ... }
public class CoverageList : IEnumerable<Coverage> { ... }
public abstract class Quote
{
protected VehicleList vehicles;
protected CoverageList coverages;
internal Quote() { ... }
public IReadOnlyCollection<Vehicle> Vehicles
{
get { return this.vehicles.AsReadOnly(); }
}
public IReadOnlyCollection<Coverage> Coverages
{
get { return this.coverages.AsReadOnly(); }
}
...
}
public sealed class OhQuote : Quote
{
//needs to access protected fields
...
}
public sealed class InQuote : Quote { ... }
public sealed class MiQuote : Quote { ... }
Quote
đóng gói đầy đủ các chức năng của cả hai VehicleList
và CoverageList
vì vậy tôi muốn đánh dấu những lớp học như internal
. Vấn đề là chúng là các loại của các trường protected
của lớp public
. Nếu tôi đánh dấu các trường đó là protected internal
thì chúng là protected
HOẶC internal
. Những gì tôi thực sự cần là để họ được protected
VÀ internal
(với protected
được ưu tiên trong hội đồng). Bạn có thể thấy rằng không phải Quote
(trong đó có một constructor internal
) cũng không phải lớp con của nó (có thể là sealed
) có thể được mở rộng ra ngoài lắp ráp. Tôi đã tìm ra cách để đạt được chức năng mong muốn bằng cách sử dụng giao diện công cộng nhưng muốn đảm bảo rằng không có cách nào ngắn gọn hơn.
tạo thuộc tính nội bộ đóng gói trường được bảo vệ – Gusman
@Gusman sẽ vẫn hiển thị trường được bảo vệ cho người tiêu dùng của lớp trong hội đồng. –
Xin lỗi nhưng sau đó tôi không thực sự hiểu những gì bạn đang yêu cầu, một trường được bảo vệ sẽ luôn hiển thị với bất kỳ người tiêu dùng nào, bất kể nó được xác định ở đâu và nội dung sẽ luôn hiển thị cho tất cả các lớp trong cùng một lắp ráp, do đó, một "bảo vệ nội bộ" sẽ được hiển thị cho người tiêu dùng bên trong lắp ráp, bạn sẽ làm gì sau đó? – Gusman