在命名空间中定义的元素不能显式声明为私有的、受保护的或受内部保护的

本文关键字:受保护 内部 保护 声明 定义 命名空间 元素 不能 | 更新日期: 2023-09-27 18:08:09

我尝试将一个类设置为私有的,得到了这个错误"在命名空间中定义的元素不能显式地声明为私有的、受保护的或受保护的内部"

我明白它的意思,但我想问为什么这是不允许的?是否所有的访问修改都不适用于类?为什么我不能使一个类私有,受保护或受保护的内部?

在命名空间中定义的元素不能显式声明为私有的、受保护的或受内部保护的

因为private意味着成员只在包含它的类中可见。因为顶级类没有包含它的类,所以它不能是私有的(或受保护的)。(Internal或public都是有效的修饰符)。

你希望private在顶级类中是什么意思?

当然,所有的修饰符都适用于嵌套类,即在另一个类中定义的类。

Namespace级别只能使用publicinternal

正如Abatonime所说,您只能在命名空间级别使用publicinternal
privateprotectedprotected internal只能在Class级别使用。

这是

namespace X
{
    class A
    {
        // class code here
        private class B // this class is an inner class
        {
            // class code here
        }
    }
}

这不会

namespace X
{
    class A
    {
        // class code here
    }
    private class B // this is a class inside a namespace
    {
        // class code here
    }
}

因为这没有意义。您无法访问在命名空间级别定义的受保护类或私有类,只能访问嵌套类。

只有嵌套类可以声明为私有。非嵌套类只能是公共的或内部的(不带修饰符的隐式)

我遇到了同样的问题,因为我正在创建一个自定义DLL,并且只希望某些类对使用DLL的应用程序可见。因此,对于我想要私有的类(在特定的命名空间内),我只是完全删除了修饰符。DLL中相同名称空间内的其他类仍然可以访问这些类,但在调用应用程序的智能感知中没有显示这些类。不需要嵌套类。我能想到的唯一解释是错误消息说不能"显式"声明private…它没有说任何隐含的东西。

namespace SmartCardAuthentication
{
  class SmartCardIdentity : IIdentity
  {
    private string _firstName;
    private string _lastName;
    private string _middleInitial;
        ....
   }
}

在上面的示例代码中,类"SmartCardIdentity"对同一名称空间内的其他类可用,但当该类滚入DLL时,对调用应用程序不可用。我还没有测试过它的任何其他方式(即可见性从类在不同的命名空间内的DLL)。

顶级类型的可访问性默认为internal

类和结构成员的默认可访问性是private

接口和枚举成员唯一可能的可访问性是public

所以一个类默认是private,如果你想访问它,你必须把public放在它之前

只有PublicInternal可以定义类。如果在类默认值内部之前没有定义访问修饰符。

参考MSDN - [https://msdn.microsoft.com/en-us/library/8fd16xs0(v=vs.90).aspx]

在现实世界中,我们关注的是可见的物体一旦对象可见,我们就讨论对象

的作用域

实例

如果你走在街上,你会看到一群房子殖民地有房子。如果殖民地受到保护没有人看不到房子

编程中

如果我们在顶层设置class为private/protected没人知道这件事

是否存在于汇编中?

如果我超出了范围,请纠正我