我有以下代码返回错误" '对象'不包含带x参数的构造函数。"试图调用基础构造函数的行。
解决方案1,项目1
namespace Project.Sub.A
{
internal class Foo
{
internal Foo(int a, long b) {}
}
}
解决方案1,项目2
namespace Project.Sub.B{
internal class Bar : Foo
{
internal Bar(int a, long b,long c) :base(a,b+c) {}
}
}
我不知道为什么这不想工作。可能是我的命名空间配置不正确吗?
答案 0 :(得分:8)
internal
访问权限是程序集,而非命名空间。
因为基类中的构造函数声明为internal
,所以其他项目中的子类无法访问它。尝试将其更改为protected internal
,或仅protected
。
<强>更新强>
注意到基类也是internal
。如果您希望在第二个项目中看到它,则需要将其设为public
。或者,您可以在Project1中的[assembly:InternalsVisibleTo("Project2")]
中添加AssemblyInfo.cs
。 (不过,我个人不会推荐这个选项。)
答案 1 :(得分:3)
这里存在许多令人困惑的问题。
internal
表示类只在其自己的程序集中可见,而不是在程序集外部的客户端代码中可见。 Foo应该是公共的,以便可以在其他程序集中使用答案 2 :(得分:2)
内部意味着visible to other classes in the current assembly
因为你在第二个项目中定义了第二个类,所以它看不到那个基础构造函数。
尝试同时制作Foo Class&amp;而是构造函数protected
或internal
。
答案 3 :(得分:2)
如果它在你的问题建议的单独项目中,并且你的基类被标记为内部,那么它应该无法找到整个类型,更不用说构造函数。
将Foo'访问者更改为公开。