2012-09-13 46 views
2

我在尝试几件事,想知道为什么会发生这种情况。受保护的班级内部工作但不在外面工作

说,我有一个命名空间ň称为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 
     { 
     } 
    }  
} 

我理论上缺少什么吗?它相当混乱。

回答

2

看看错误。在一个命名空间中定义

元素不能被显式声明为 私人,保护,或受保护的内部

只有内部或公共成员被允许类外。

你的第二种情况是将B类定义为类A的成员,这就是为什么你没有得到错误。

您可能会看到Access Modifiers C#

类和结构被声明直接一个命名空间内(在其他 的话,那不是嵌套在其他类或结构内)可以 是公共或内部。如果未指定访问 修饰符,则内部是默认值。

+0

谢谢habib。其合理性 – VIRA

+0

除了internal(默认修饰符)和public外,密封也可以用作类的修饰符。 –

2

除非班级在另一班级内,否则班级不能为protected

protected关键字仅适用于类别的成员。在你的第二个例子中,class B碰巧就是那个成员。

想一想:
protected意思是:派生类可以访问这个成员。
由于没有派生名称空间这样的概念,因此protected关键字对于名称空间的成员没有意义。

1

保护声明为派生类型的可见性水平。

在您的第一个案例中,您声明namespace中的类。没有名称空间的任何polymophic支持,所以没有在namespace

在第二种情况下使用受保护的种类的任何培训就业处,而是使用它的其他CLASSE(类A),这使得它为所有的孩子看到里面A类。

0

任何东西不是封闭类型(类)的成员根本没有意义的是protected受保护成员仅用于访问从包含该成员的已定义类型派生的成员,并且在第一个示例中您缺少该类型定义。

相关问题