我是想一些事情,想知道为什么会发生如此。
我说,我有一个命名空间ň称为A类,我试图创建受保护的内部类B.
namespace n
{
public class A
{
public A()
{
}
}
protected internal class B //throwing error
{
}
}
但是当我尝试这样的(B作为子类A),其不扔错误,其内置的成功。 你能解释我为什么会这样?
namespace n
{
public class A
{
public A()
{
}
protected internal class B // its not throwing error
{
}
}
}
我失去了什么理论? 它很有点混乱。
看看错误。
在一个命名空间中定义的元素不能被明确声明为private,protected或受保护的内部
只有内部或公共成员被允许类外。
你的第二个案例是定义B级A类的成员,这就是为什么你没有得到错误。
您可能会看到访问修饰符C#
类和结构被声明直接在名称空间内(换句话说,没有被嵌套在其它类或结构内 )可以是公共的或内部的。 内部是如果没有指定访问修饰符是默认。
类不能被protected
除非它是另一个类中。
该protected
关键字仅适用于一类的成员 。 在第二个例子中, class B
恰好是该成员。
想想看:
protected
手段:派生类可以访问此成员。
至于有没有这样的概念衍生的命名空间,在protected
关键字不为命名空间的成员才有意义。
保护声明的派生类型的可见程度。
在你的第一个情况下,你声明类的内部namespace
。 没有名称空间的任何polymophic支持,因此不存在使用受保护类的任何SENCE namespace
在第二种情况下,相反,你使用它的其他CLASSE(类中的A
),这使得它为所有儿童可见A
类。
任何不是一个封闭类型(类)的成员都没有什么意义进行protected
。 protected成员只对那些访问谁从包含该成员的定义类型派生,而在第一个例子情况下,您缺少类型定义。