C#中是否可以使用受内部AND保护的成员?

and*_*ert 7 c# oop inheritance protected

考虑以下类:

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 { ... }
Run Code Online (Sandbox Code Playgroud)

Quote完全包裹两者的功能VehicleListCoverageList所以我想这些类标记为internal.问题是它们是类的protected字段类型public.如果我将那些字段标记为protected internal那么它们就是protectedOR internal.我真正需要的是他们是protectedinternal(protected在集会中优先考虑).您可以看到,无论是Quote(具有internal构造函数)还是其子类(都是sealed)都可以扩展到程序集之外.我已经想出如何使用公共接口实现所需的功能,但希望确保没有更简洁的方法.

Mic*_*Liu 5

虽然.NET运行时支持这个概念("FamilyAndAssembly"),但C#目前不支持.

这是以私有保护访问修饰符的形式为C#6.0提出的,但该功能已被删除.

更新: private protected已添加到C#7.2.