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
相关产品推荐
相关产品推荐

