错误“在命名空间中定义的元素不能显式声明为private,protected或protected internal”

时间:2011-09-11 16:39:12

标签: c# .net

我尝试将一个类设为私有并获得此错误“在命名空间中定义的元素不能显式声明为私有,受保护或受保护的内部”

我明白了,但我想问为什么不允许这样做?所有访问修改是否都不适用于Class?为什么我不能将课程设为私人,受保护或受保护的内部?

9 个答案:

答案 0 :(得分:72)

因为private表示该成员仅在包含类中可见。由于顶级类没有包含它的类,因此它不能是私有的(或受保护的)。 (但内部或公共是有效的修饰符)。

你希望私人在顶级课程中意味着什么?

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

答案 1 :(得分:12)

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

答案 2 :(得分:3)

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

答案 3 :(得分:3)

As Abatonime said,您只能在命名空间级别使用public class CustomHttpSessionStrategy extends CookieHttpSessionStrategy { @Override public void onInvalidateSession(HttpServletRequest request, HttpServletResponse response) { super.onInvalidateSession(request, response); response.addHeader("X-Application-Session-Is-New", "true"); } } public
internalprivateprotected只能在班级使用。

这有效

protected internal

这不会

namespace X
{
    class A
    {
        // class code here

        private class B
        {
            // class code here
        }
    }
}

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

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

        ....
   }
}

在上面的示例代码中,类“SmartCardIdentity”可用于同一命名空间中的其他类,但在将此类转换为DLL时,无法调用应用程序。我还没有以其他方式测试它(即DLL中不同命名空间中的类的可见性。)。

答案 6 :(得分:0)

顶级类型的默认辅助功能是internal

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

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

默认情况下,某个类是private,如果您想访问该类,则必须在此之前添加public

答案 7 :(得分:0)

定义类时,只有 Public Internal 适用。如果在类默认为 internal 之前未定义访问修饰符。

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

答案 8 :(得分:0)

在现实世界中,我们专注于可见物体 一旦对象可见,我们就讨论对象的范围

现实世界中的示例

如果您在大街上行走,就会看到殖民地的房屋 殖民地有房子。 如果殖民地受到保护,没有人看不到房屋 人们认为没有殖民地就没有房子

在编程中

如果我们将类设为私有/顶级保护 没人知道

它存在于程序集中吗?

如果我不在范围之内,请纠正我