试着非常简洁地解释这个
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");
我相信这是我的计划的核心,希望有人能够发现这里发生的错误
答案 0 :(得分:2)
您应该将基类和派生类明确声明为public
。类的default accessibility为internal
,因此主方法无法访问这两个类。它们只能在您的类库项目中访问。
答案 1 :(得分:1)
您应该收到三个错误消息:
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方法的类位于不同的程序集中,因此您无权访问它们。
让它们公开。
我承认最后一条错误消息有点误导,但您应该查看所有错误消息而不仅仅是那个 - 前两个应该给您足够的提示正在进行中。
答案 2 :(得分:0)
我看到的唯一问题是EmployeeExempt
是internal
而不是public
,但这与错误消息不符...
我假设,您没有向我们展示所有相关代码,或者代码与您展示的代码有所不同。
答案 3 :(得分:0)
您的两个类都被声明为私有。使用public前缀类名,或者如果它们可能位于同一个程序集内部。
答案 4 :(得分:-1)
基类EmployeeBase中的字符串是私有的。尝试公开。