【问题标题】:Defined Elements cannot be explicitly declared as private or protected定义的元素不能显式声明为私有或受保护
【发布时间】:2014-05-15 08:13:35
【问题描述】:

根据面向对象的原则,我们可以将任何命名空间中的任何类定义为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 是什么意思。什么意思?

【问题讨论】:

  • 只有嵌套类可以标记为受保护。

标签: c# class oop access-modifiers


【解决方案1】:

只有嵌套类可以标记为protected。

namespace test
{
    public class A
    {
        public A() { }

        protected class B
        {
            public B() { }
        }
    }  
}

【讨论】:

    【解决方案2】:

    Protected 表示该类只能在指定或继承自它的类内部使用。因此,在命名空间中声明一个受保护的类是没有意义的。这意味着什么?因此,protected 只能应用于嵌套类。

    【讨论】:

      【解决方案3】:

      在 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
          {
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-18
        • 2012-02-27
        • 2016-01-18
        • 2016-10-23
        • 2011-04-21
        • 2012-06-22
        • 1970-01-01
        相关资源
        最近更新 更多