C#的范围和嵌套命名空间

时间:2011-12-23 17:57:33

标签: c# namespaces nested scopes

我在C#中有一个项目,其中在单独的文件中定义了两个名称空间,其中一个是另一个的子集:

namespace RSSTimerJob

namespace RSSTimerJob.Features.RSSFilter

我有一个名为Toolbox的静态类,它属于第一个名称空间。现在,当我尝试从第二个命名空间中的自定义类调用Toolbox类的受保护静态变量时,由于其保护级别,我收到一条错误,指出它无法访问。

为什么它会给我这个错误。由于第二个命名空间是第一个命名空间的子集,这是不是意味着保护变量应该允许第二个命名空间的类看到它?

当然,将变量设置为公共,会使这个错误消失,但我只是好奇:)

3 个答案:

答案 0 :(得分:1)

protected不是您要使用的关键字。

internal允许在同一个程序集中访问其他类的类成员。

在C#中,protected允许基本成员访问从该基础派生的类。您可能在考虑Java,其中protected略有不同,因为它允许访问子类以及同一个包中的类。要在C#中获得大致相同的行为,您可以使用包含protected internalprotected的组合internal,授予对派生类以及访问同一程序集中的类。

答案 1 :(得分:0)

protected表示该内容可供类本身使用,并派生

虽然我不会对名称空间狂暴。如果你有很多东西要放在它们中并且这些东西足够不同,它们就很有用。这里有一些关于名称空间最佳实践的guidelines

答案 2 :(得分:0)

“protected”表示可以从同一个类或派生类访问该成员。但是,这不允许同一名称空间的其他成员访问该成员。

您正在寻找的可能是“内部”,这意味着可以通过同一程序集中的代码访问该成员。

顺便说一句,您可以从不同的程序集中向同一名称空间添加更多成员。