调用基本构造函数不起作用 C#

发布于 2025-01-07 20:40:30 字数 428 浏览 0 评论 0原文

我有以下代码返回错误“‘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) {}

  }
}

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

I have the following code returning the error " 'object' does not contain a constructor that takes x arguments." on the line trying to call the base constructor.

Solution 1, project 1

namespace Project.Sub.A
{
  internal class Foo
  {
    internal Foo(int a, long b) {}

  }
}

Solution 1,project 2

namespace Project.Sub.B{
  internal class Bar : Foo
  {
    internal Bar(int a, long b,long c) :base(a,b+c) {}

  }
}

I have NO idea why this does not want to work. Could be my namespaces configured incorrectly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

娇女薄笑 2025-01-14 20:40:30

内部访问是按程序集进行的,而不是按名称空间进行的。

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

更新

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

internal access is per assembly, not namespace.

Because the constructor in the base class is declared internal, it is not accessible to the subclass in the other project. Try changing it to protected internal, or just protected.

update

Just noticed that the base class is also internal. You will need to make it public if you want it to be seen in the second project. Or, you can add [assembly:InternalsVisibleTo("Project2")] in AssemblyInfo.cs in Project1. (I wouldn't personally recommend this option, though.)

樱娆 2025-01-14 20:40:30

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

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

There are a number of confounding issues here.

  • First, your classes are defined as internal in two separate projects. internal means that a class is only visible within its own assembly and not to client code outside of the assembly. Foo should be public so that it can be used in other assemblies
  • If you make class Foo visible outside of the assembly then you will have to reference that assembly from the project that contains class Bar
  • And you will have to make sure that the namespaces are referenced properly as well
魂归处 2025-01-14 20:40:30

内部意味着对当前程序集中的其他类可见

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

尝试同时创建 Foo 类和 Foo 类。构造函数protected 改为internal

internal means visible to other classes in the current assembly

Because you're defining your second class in a second project, it can't see that base constructor.

Try making both the Foo Class & Constructor protected instead or internal.

宫墨修音 2025-01-14 20:40:30

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

将 Foo 的访问器更改为公共。

If it's in a separate project as your question suggests, and your base class is marked internal, then it shouldn't be able to find the entire type, let alone the constructor.

Change Foo' accessor to public.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文