定义的元素不能显式声明为私有或受保护

时间:2014-04-03 13:04:47

标签: c# class oop access-modifiers

根据面向对象的原则,我们可以将任何名称空间中的任何类定义为privateprotected但是当我创建一个类privateprotected时,我得到了编译错误后:

  

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的含义。这是什么意思?

3 个答案:

答案 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
    {
    }
}
相关问题