无法创建抽象类Worker实例的技术求助(需保留抽象部分)
解决「Cannot create instance of type or interface」报错问题
报错核心原因
你遇到的报错是因为C#中用abstract修饰的抽象类不能直接实例化——抽象类的设计目的就是作为基类被其他类继承,本身不能生成对象,和你是否添加无参构造函数无关,new Worker()这种写法本身就是语法错误。
代码里的其他隐患
除了实例化抽象类的错误,你的代码还有两个问题:
expLevel()重写方法里直接返回自身,会导致无限递归,运行时会触发栈溢出- 你把题目要求的「抽象属性」写成了抽象方法,不符合题目定义
修正后的代码(保留所有abstract要求的部分)
abstract class Worker { protected string name; protected int ID; // 修正:按题目要求改成抽象属性 protected abstract int ExpLevel { get; } public abstract string Experience(int expLevel); // 保留题目要求的抽象方法 public Worker(string name, int ID) // 基类构造函数 { this.name = name; this.ID = ID; } public Worker() { } // 保留你添加的无参构造 } class Labourer : Worker { // 替换错误的抽象类实例化,改用子类实例化(利用多态特性) Worker worker1 = new Labourer(); // 重写抽象属性,返回具体经验值(示例写死为3,可按需修改) protected override int ExpLevel { get { return 3; } } public override string Experience(int expLevel) { if (expLevel > 5) { return "Senior"; } return "Junior"; } }
关键修正说明
- 移除
new Worker():换成实例化子类Labourer,通过基类Worker引用子类对象,符合多态设计 - 修正抽象属性定义:把原抽象方法改成抽象属性,匹配题目要求的「抽象属性」定义
- 解决递归问题:重写的
ExpLevel返回具体值,避免无限递归调用
内容的提问来源于stack exchange,提问作者no-one
相关产品推荐
相关产品推荐

