【问题标题】:Calling base constructors not working c#调用基本构造函数不起作用c#
【发布时间】:2012-03-12 21:04:58
【问题描述】:

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

  }
}

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

【问题讨论】:

    标签: c# constructor base


    【解决方案1】:

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

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

    更新

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

    【讨论】:

    • 你怎么知道它在另一个项目中?
    • @Jon 因为他这么说...解决方案 1,项目 2。
    • @Vort3x 这些命名空间没有任何意义!
    • @SteveCzetty 谢谢,公众解决了它。我会在 8 分钟内接受。
    • @Jon 是的,它太含糊了,这就是为什么它也明确说明的原因:)
    【解决方案2】:

    内部表示visible to other classes in the current assembly

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

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

    【讨论】:

      【解决方案3】:

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

      将 Foo' 访问器更改为 public。

      【讨论】:

      • 您的意思是访问修饰符吗?访问器是一个“get”方法,不是吗?
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-24
        • 2010-10-12
        • 1970-01-01
        • 2011-03-11
        • 2018-05-25
        • 2015-08-18
        • 2022-12-03
        • 2012-09-28
        相关资源
        最近更新 更多