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



根据面向对象的原则,我们可以将任何命名空间中的任何类定义为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
    {
    }
}

我搜索了一个解决方案,我在堆栈溢出上找到了以下内容:

任何不是封闭类型(类)成员的东西都没有任何意义。

为什么我不能将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
    {
    }
}

相关内容

最新更新