【问题标题】:C# internal types in protected fields受保护字段中的 C# 内部类型
【发布时间】:2021-10-20 21:39:06
【问题描述】:

我正在尝试编写如下类库:

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. 我不想让FieldTest 命名空间之外可见,因为它破坏了封装;
  3. 我需要继承,因为SomeDerivedClass1SomeDerivedClass2 共享大量代码。

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

【问题讨论】:

  • 无法使Field 仅对特定命名空间可见。无论如何,命名空间不封装任何东西。命名空间的目的是防止命名冲突。
  • 但是Field如果是private则封装在Test
  • 不,不是。如果它是私有的,它将不会编译。来试试吧
  • 是的,命名空间成员不能是私有的,我错过了那个

标签: c# oop inheritance encapsulation


【解决方案1】:

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

不要与protected internal 混淆,protectedinternal

public abstract class SomeClass
{
    private protected Field field;
}

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

【讨论】:

  • 它仍然可以在同一程序集中的Test 之外使用。但是,我想,这是可以实现的最好的……
猜你喜欢
  • 1970-01-01
  • 2013-04-08
  • 2020-11-02
  • 1970-01-01
  • 2014-05-21
  • 2010-12-21
  • 2011-01-02
  • 2011-01-23
  • 2020-08-16
相关资源
最近更新 更多