1

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

namespace RSSTimerJob

namespace RSSTimerJob.Features.RSSFilter

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

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

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

4

3 回答 3

2

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

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

在 C# 中,protected允许访问从该基派生的类的基成员。您可能会想到 Java,其中protected略有不同,因为它授予对同一包中的子类和类的访问权限。要在 C# 中获得大致相同的行为,您将使用组合protected internal(包括protectedand internal),授予对派生类的访问权限以及对同一程序集中的类的访问权限。

于 2011-12-23T18:04:18.693 回答
0

protected意味着该事物可用于类本身和派生

不过,我不会对命名空间发狂。如果您有很多东西要放入它们并且这些东西足够不同,它们就会很有用。以下是有关命名空间最佳实践的一些指南

于 2011-12-23T18:05:01.273 回答
0

“受保护”意味着可以从同一类或派生类访问该成员。但这不允许同一名称空间的其他成员访问该成员。

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

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

于 2011-12-23T18:05:02.767 回答