派生类构造函数错误
本文关键字:错误 构造函数 派生 | 更新日期: 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方法的类位于不同的程序集中,因此您无法访问它们。
让它们公开。
我承认最后一条错误消息有点误导人,但是您应该查看所有错误消息,而不仅仅是这一条——前两条应该已经给了您足够的提示,让您了解发生了什么。
我看到的唯一问题是EmployeeExempt
是internal
而不是public
,但这与错误信息不匹配…
我猜想,您没有向我们展示所有相关的代码,或者代码确实与您所展示的略有不同。
你的两个类都被声明为私有。
基类EmployeeBase中的字符串是私有的。