首页 > 解决方案 > 受保护字段中的 C# 内部类型

问题描述

我正在尝试编写一个类库,如下所示:

namespace Test
{
    class Field
    { 
    }

    public abstract class SomeClass
    {
        protected Field field;  //Inconsistent accessibility: field type 'Field' is less accessible than field 'SomeClass.field'
    }

    public class SomeDerivedClass1:SomeClass
    {
    }

    public class SomeDerivedClass2:SomeClass
    {
    }
}

规则:

  1. 我不想创建Field一个受保护的子类SomeClass,因为它被其他类使用;
  2. 我不想在命名空间Field之外显示Test,因为它破坏了封装;
  3. 我需要继承,因为SomeDerivedClass1SomeDerivedClass2共享很多代码。

在不违反任何这些规则的情况下,是否有解决此问题的方法?

标签: c#oopinheritanceencapsulation

解决方案


您可以使用新的private protected修饰符。这相当于internalAND protected

不要与protected internal哪个是protectedOR混淆internal

public abstract class SomeClass
{
    private protected Field field;
}

不过,它在命名空间外的同一个程序集中仍然可见。


推荐阅读