调用基础构造函数不工作c#

时间:2012-02-22 14:11:14

标签: c# constructor base

我有以下代码返回错误" '对象'不包含带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) {}

  }
}

我不知道为什么这不想工作。可能是我的命名空间配置不正确吗?

4 个答案:

答案 0 :(得分:8)

internal访问权限是程序集,而非命名空间。

因为基类中的构造函数声明为internal,所以其他项目中的子类无法访问它。尝试将其更改为protected internal,或仅protected

<强>更新

注意到基类也是internal。如果您希望在第二个项目中看到它,则需要将其设为public。或者,您可以在Project1中的[assembly:InternalsVisibleTo("Project2")]中添加AssemblyInfo.cs。 (不过,我个人不会推荐这个选项。)

答案 1 :(得分:3)

这里存在许多令人困惑的问题。

  • 首先,您的类在两个单独的项目中定义为内部。 internal表示类只在其自己的程序集中可见,而不是在程序集外部的客户端代码中可见。 Foo应该是公共的,以便可以在其他程序集中使用
  • 如果在程序集外部显示类Foo,则必须从包含类Bar的项目中引用该程序集
  • 您必须确保名称空间也被正确引用

答案 2 :(得分:2)

内部意味着visible to other classes in the current assembly

因为你在第二个项目中定义了第二个类,所以它看不到那个基础构造函数。

尝试同时制作Foo Class&amp;而是构造函数protectedinternal

答案 3 :(得分:2)

如果它在你的问题建议的单独项目中,并且你的基类被标记为内部,那么它应该无法找到整个类型,更不用说构造函数。

将Foo'访问者更改为公开。