根据面向对象的原则,我们可以将任何命名空间中的任何类定义为private
或protected
但是当我将类创建为private
或protected
时,我得到以下编译错误:
Elements defined in a namespace cannot be explicitly declared as private, protected, or protected internal
namespace test
{
public class A
{
public A()
{
}
}
protected class B //throwing error
{
}
}
我搜索了一个解决方案,我在堆栈溢出上找到了以下内容:
任何不是封闭类型(类)成员的东西都没有任何意义。
为什么我不能将B
声明为protected
?
我想我不明白protected
是什么意思。什么意思?
只有嵌套的类才能标记为protected
。
namespace test
{
public class A
{
public A() { }
protected class B
{
public B() { }
}
}
}
受保护表示该类只能在指定或继承它的类中使用。因此,在命名空间中声明受保护的类是没有意义的。这意味着什么?因此,受保护只能应用于嵌套类。
在 C# 中,不能将类声明为受保护,除非它们嵌套在其他类中:
namespace test
{
public class A
{
public A()
{
}
protected class B // nested class
{
}
}
}
这是有道理的,因为protected
意味着它只能由封闭类或从该封闭类派生的类访问。
如果类 B 可以由同一程序集中的所有类访问,但不能从外部访问,则可以将该类声明为 internal
:
namespace test
{
public class A
{
public A()
{
}
}
internal class B // accessible within same assembly
{
}
}