受保护字段中的 C# 内部类型

C# internal types in protected fields

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

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 的受保护子 class,因为它被其他 classes;
  2. 使用
  3. 我不想让 FieldTest 命名空间之外可见,因为它破坏了封装;
  4. 我需要继承,因为 SomeDerivedClass1SomeDerivedClass2 共享很多代码。

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

可以使用new private protected modifier。这相当于 internal AND protected.

Not to be confused with protected internal which is protected OR internal

public abstract class SomeClass
{
    private protected Field field;
}

尽管在命名空间外的同一个程序集中仍然可见。