错误“名称空间中定义的元素不能明确声明为私有,受保护或受保护的内部”

我试图做一个类作为私人,并得到这个错误“元素定义在命名空间不能显式声明为私人,受保护,或受保护的内部”

我明白了,但是我想问为什么这是不允许的? 所有访问修改都不适用于Class吗? 为什么我不能成为一个私人的,受保护的或保护的内部?

因为私人意味着该成员只在包含类中可见。 由于顶级类没有包含它的类,因此它不能是私有的(或保护的)。 (虽然内部或公共是有效的修饰符)。

你想在私人的顶级课堂上做什么?

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

您只能在名称空间级别使用publicinternal

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

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

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

这工作

 namespace X { class A { // class code here private class B { // class code here } } } 

这不会

 namespace X { class A { // class code here } private class B { // class code here } } 

我有这个相同的问题,因为我正在创build一个自定义的DLL,只希望某些类对于使用该DLL的应用程序可见。 所以我只是删除修饰符完全为我想成为私人(在特定的命名空间内)的类。 类仍然可以在DLL中的同一名称空间内的其他类访问,但是在调用应用程序中不显示在Intellisense中。 不需要嵌套类。 我能想到的唯一的解释是错误消息说不能“明确”宣布私人…它不会隐式地说任何事情。

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

在上面的示例代码中,“SmartCardIdentity”类可用于同一名称空间内的其他类,但在将此类编译为DLL时,不适用于调用应用程序。 我还没有以任何方式testing它(即从DLL中不同命名空间中的类的可见性)。

顶级types的默认可访问性是internal

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

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

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

定义课程时只有公共内部适用。 如果在类默认是内部之前没有定义访问修饰符。

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