【发布时间】: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
{
}
}
规则:
- 我不想让
Field成为SomeClass的受保护子类,因为它被其他类使用; - 我不想让
Field在Test命名空间之外可见,因为它破坏了封装; - 我需要继承,因为
SomeDerivedClass1和SomeDerivedClass2共享大量代码。
在不违反任何这些规则的情况下,是否有解决此问题的方法?
【问题讨论】:
-
无法使
Field仅对特定命名空间可见。无论如何,命名空间不封装任何东西。命名空间的目的是防止命名冲突。 -
但是
Field如果是private则封装在Test中 -
不,不是。如果它是私有的,它将不会编译。来试试吧
-
是的,命名空间成员不能是私有的,我错过了那个
标签: c# oop inheritance encapsulation