根据面向对象的原则,我们可以将任何名称空间中的任何类定义为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
{
}
}
我搜索了一个解决方案并I found the following on Stack Overflow:
任何不是封闭类型(类)成员的东西都没有意义保护。
为什么我不能将B
声明为protected
?
我想我不明白protected
的含义。这是什么意思?
答案 0 :(得分:1)
只有嵌套类可以标记为protected
。
namespace test
{
public class A
{
public A() { }
protected class B
{
public B() { }
}
}
}
答案 1 :(得分:1)
Protected表示该类只能在指定或继承的类中使用。因此,在命名空间中声明受保护的类是没有意义的。这意味着什么?因此,受保护的只能应用于嵌套类。
答案 2 :(得分:0)
在C#中,您不能将类声明为protected,除非它们嵌套在其他类中:
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
{
}
}