公共变量无法访问

时间:2011-02-27 20:16:16

标签: c# .net namespaces

在一个名称空间(Ventosa.Graphics)中,我有一个名为Model

的公共类
namespace Ventosa.Graphics
{
   public class Model : GraphicsResource
   {
       public Model(...)
       {
           ...
       }
       ...
   }
}

然后在另一个项目中我尝试访问这个类

Model player = new Model(...);

但是这一行会产生错误。 C#认识到Model存在,但声称由于它的保护级别而无法访问它。不应该公开它意味着它可以从任何地方访问吗?

是的,基类GraphicsResource是公共的。

这也发生在我项目的其他几个地方,都是派生的类。

编辑: 确切的错误消息是(德语): Der Zugriff auf“Ventosa.Graphics.Model”ist aufgrund der Sicherheitsebenenichtmöglich。翻译成英文,它说:“Ventosa.Graphics.Model”由于其防护等级而无法进入。 / em>的

2 个答案:

答案 0 :(得分:2)

你描述了一些显然不应该的东西。我建议您尝试以最简单的方式重现问题。你可能无法做到。然后添加到您的示例中,使其越来越像您的生产代码,直到您触发问题。

删除对超类GraphicResource的引用。确保只定义了一个构造函数。尝试使用完整的命名空间引用( not using语句)和单个显式构造函数,从同一命名空间中实例化该类。它可能会奏效。

如果它不起作用,请退一步并完全定义一个新类型(Ventosa.Graphics.ModelTest或其他东西)。确保 有效。

现在,重新添加片段。继承自GraphicResource,试试吧。删除命名空间限定条件;请改用using。将实例化移动到不同的命名空间,然后移动到不同的程序集。

您已经确认GraphicResource类的定义是公开的。那么它的超类呢?

答案 1 :(得分:0)

我知道这可能听起来很傻,但是试图重新启动Visual Studio(清理并重建解决方案后)?我注意到一些奇怪的行为,特别是如果你启用了Code-Coverage并安装了一些Visual Studio的Powertools。

在之前的某些版本中,模型内部存在吗?这是一个非常普遍的名字。

编辑:一种确保实际拥有正确类型的方法,您可以在第二个项目中悬停“模型”声明并按F12(或右键单击并选择“转到定义”,不知道德语现在的术语)。这应该带你到你的类或其他一些“模型”类的定义(也显示.NET内部类型)。