派生类构造函数错误

本文关键字:错误 构造函数 派生 | 更新日期: 2023-09-27 17:50:15

试着简洁地解释

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

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");

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

派生类构造函数错误

您应该显式地将基类和派生类声明为public。类的默认可访问性是internal,因此这两个类都不能从主方法访问。它们只能从类库项目中访问。

你应该得到三个错误信息:

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方法的类位于不同的程序集中,因此您无法访问它们。

让它们公开。

我承认最后一条错误消息有点误导人,但是您应该查看所有错误消息,而不仅仅是这一条——前两条应该已经给了您足够的提示,让您了解发生了什么。

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

你的两个类都被声明为私有。

在类名前加上public前缀,如果它们打算在同一个程序集中,可以是internal。

基类EmployeeBase中的字符串是私有的。