【问题标题】:Derived class constructor errors派生类构造函数错误
【发布时间】:2011-04-13 06:08:22
【问题描述】:

试图非常简洁地解释这一点

  • 我有一个抽象基类和两个派生类。
  • 基类有一个构造函数,它接受一个字符串参数并将其分配给一个字段
  • 派生类构造函数调用基类构造函数,每个构造函数都采用一个字符串参数。
  • 这些是主解决方案中引用的类库项目的一部分。
  • 主要是,当我尝试创建类的实例并传入单个参数(应该如此)时,我遇到了这个错误:

library.class 不包含采用单个参数的构造函数。

如果我创建一个没有参数的对象,则会创建以下错误行:

library.class.constructor(string) 由于其保护级别而无法访问。

我无法找到解决此问题的方法,我在下面提供了我的基本代码,如果有人可以查看并判断这里发生了什么错误,那就太棒了:

基类:

abstract class EmployeeBase
    {
private string empNumber;
public EmployeeBase(string CurrentEmployeeNumber)  { empNumber = CurrentEmployeeNumber;}
......

派生类:

class EmployeeExempt : EmployeeBase
    {
        public EmployeeExempt(string CurrentEmployeeNumber) : base(CurrentEmployeeNumber) 
        { }
........

主要方法:

EmployeeExempt emp1 = new EmployeeExempt("1000");

我相信这是我程序的核心,希望有人能发现这里发生的错误

【问题讨论】:

标签: c# c#-3.0


【解决方案1】:

您应该将基类和派生类都显式声明为public。类的default accessibilityinternal,因此这两个类都无法从您的 main 方法中访问。它们只能从您的类库项目中访问。

【讨论】:

    【解决方案2】:

    您应该收到 三个 错误消息:

    Test.cs(7,9): error CS0122: 'EmployeeExempt' is inaccessible due to its
            protection level
    Test.cs(7,35): error CS0122: 'EmployeeExempt' is inaccessible due to its
            protection level
    Test.cs(7,31): error CS1729: 'EmployeeExempt' does not contain a constructor
            that takes 1 arguments
    

    前两个应该很清楚问题 - 正如其他答案所说,EmployeeBase 和 EmployeeExempt 都是内部类(非嵌套类型的默认可访问性),这意味着它们只能在同一个程序集中访问。包含 Main 方法的类位于不同的程序集中,因此您无权访问它们。

    只需将它们公开即可。

    我承认最后一条错误消息有点误导,但您应该查看所有错误消息,而不仅仅是那条 - 前两条应该已经给了您足够的提示正在进行中。

    【讨论】:

      【解决方案3】:

      我看到的唯一问题是 EmployeeExemptinternal 而不是 public,但这与错误消息不匹配...
      我假设,您没有向我们展示所有相关代码,或者代码确实与您展示的略有不同。

      【讨论】:

        【解决方案4】:

        您的两个课程都被宣布为私有。使用 public 前缀类名,或者如果它们打算在同一个程序集中可能是内部的。

        【讨论】:

          【解决方案5】:

          基类 EmployeeBase 中的字符串是私有的。尝试公开。

          【讨论】:

          • 基类构造函数公开的。但是,类本身不是。
          • @Sujay:您对字段设为私有的编辑仍然是错误的,因此,我不会删除我的反对票。
          • @丹尼尔。没问题“你犯的每一个错误都表明你还在学习”——约翰列侬(当我的吉他轻轻地哭泣时):-)
          猜你喜欢
          • 2023-04-10
          • 1970-01-01
          • 2011-02-02
          • 1970-01-01
          • 2016-07-19
          • 2018-07-21
          • 1970-01-01
          • 2011-02-14
          • 1970-01-01
          相关资源
          最近更新 更多