You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法创建抽象类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";
    }
}

关键修正说明

  1. 移除new Worker():换成实例化子类Labourer,通过基类Worker引用子类对象,符合多态设计
  2. 修正抽象属性定义:把原抽象方法改成抽象属性,匹配题目要求的「抽象属性」定义
  3. 解决递归问题:重写的ExpLevel返回具体值,避免无限递归调用

内容的提问来源于stack exchange,提问作者no-one

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:40:27