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

C#向抽象类Article列表添加元素时提示无法实例化抽象类型怎么修复

问题原因

abstract修饰的类为抽象类,设计定位是作为基类被其他类继承,不允许直接通过new关键字创建实例,这就是你触发cannot create an instance abstract type or interface 'Article'报错的核心原因。
从你提供的代码可以定位到报错触发点:普通新闻选中逻辑中,你直接执行了new Article(...)操作,违反了抽象类的使用规则。

修复方案

你项目原本就规划了继承+抽象类的实现逻辑,推荐用子类实现的方案修复,完全符合你的设计初衷:

  • 第一步:新增继承自Article的普通新闻子类,和你已有的应急新闻子类NewsArticle保持同层级
class NormalArticle : Article
{
    // 构造函数直接调用父类Article的构造方法即可
    public NormalArticle(int id, string title, string text) : base(id, title, text)
    {
        // 普通新闻有专属业务逻辑可以在这里补充,无额外逻辑留空即可
    }
}
  • 第二步:修改窗体代码的两处问题:替换普通新闻的实例化逻辑,补上应急新闻遗漏的添加到管理器的逻辑
if (rbNormal.Checked)
{
    // 把原本的new Article替换为new NormalArticle
    articalManagerAdd.addArticleNormal(new NormalArticle(Convert.ToInt32(txtNewsNumber.Text), txtNewsTitle.Text, txtNewsText.Text));
    MessageBox.Show("Normal news article has been added");
}
else if(rbEmergency.Checked)
{
    Article emergencyNews = new NewsArticle(Convert.ToInt32(txtNewsNumber.Text), txtNewsTitle.Text, txtNewsText.Text);
    // 补上你漏写的添加到ArticleManager的逻辑,否则应急新闻不会存入列表
    articalManagerAdd.addArticleEmergency(emergencyNews);
    MessageBox.Show("Emergency news article has been added");
}

如果你不需要保留Article的抽象类设计,也可以直接把Article类定义前的abstract关键字删除,即可直接实例化Article类,不过这个方案不符合你原本的抽象类设计规划,更推荐用第一种方案。

内容的提问来源于stack exchange,提问作者Jessy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:36:03