Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用基构造函数不工作#_C#_Constructor_Base - Fatal编程技术网

C# 调用基构造函数不工作#

C# 调用基构造函数不工作#,c#,constructor,base,C#,Constructor,Base,我有以下代码返回错误“'object'不包含接受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,l

我有以下代码返回错误“'object'不包含接受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) {}

  }
}

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

internal
访问权限是每个程序集,而不是命名空间

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

更新


刚才注意到基类也是
内部的
。如果希望在第二个项目中看到它,则需要将其公开。或者,您可以在项目1的
AssemblyInfo.cs
中添加
[assembly:InternalsVisibleTo(“项目2”)]
。(不过,我个人不建议使用此选项。)

内部表示当前程序集中其他类可见的

因为您正在第二个项目中定义第二个类,所以它无法看到该基本构造函数


试着将Foo类和构造函数
都设置为受保护的
,或者
内部的

,如果它如您的问题所示位于一个单独的项目中,并且您的基类被标记为内部的,那么它应该无法找到整个类型,更不用说构造函数了


将Foo'accessor更改为public。

这里有许多令人困惑的问题

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

你怎么知道它在另一个项目中?@Jon,因为他这么说。。。解决方案1,项目2。@Vort3x这些名称空间没有任何含义@SteveCzetty谢谢,公众解决了这个问题。我会在8分钟内接受。@Jon是的,它太模糊了,这就是为什么它也被明确声明:)你是说访问修饰符吗?访问器是一种“get”方法,不是吗?