在一个名称空间(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>的
答案 0 :(得分:2)
你描述了一些显然不应该的东西。我建议您尝试以最简单的方式重现问题。你可能无法做到。然后添加到您的示例中,使其越来越像您的生产代码,直到您触发问题。
删除对超类GraphicResource
的引用。确保只定义了一个构造函数。尝试使用完整的命名空间引用( not using
语句)和单个显式构造函数,从同一命名空间中实例化该类。它可能会奏效。
如果它不起作用,请退一步并完全定义一个新类型(Ventosa.Graphics.ModelTest
或其他东西)。确保 有效。
现在,重新添加片段。继承自GraphicResource
,试试吧。删除命名空间限定条件;请改用using
。将实例化移动到不同的命名空间,然后移动到不同的程序集。
您已经确认GraphicResource
类的定义是公开的。那么它的超类呢?
答案 1 :(得分:0)
我知道这可能听起来很傻,但是试图重新启动Visual Studio(清理并重建解决方案后)?我注意到一些奇怪的行为,特别是如果你启用了Code-Coverage并安装了一些Visual Studio的Powertools。
在之前的某些版本中,模型内部存在吗?这是一个非常普遍的名字。
编辑:一种确保实际拥有正确类型的方法,您可以在第二个项目中悬停“模型”声明并按F12(或右键单击并选择“转到定义”,不知道德语现在的术语)。这应该带你到你的类或其他一些“模型”类的定义(也显示.NET内部类型)。