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

XNA/MonoGame报CS0144错误无法实例化抽象类型Button问题求解

错误原因

你遇到的CS0144报错核心原因是你把Button类声明为了抽象类(abstract修饰),C#语法规定抽象类不能直接用new关键字创建实例。
你在Button.cs的类定义第一行写了public abstract class Button : Component,注释里也标注了是故意加abstract让它作为基类必须被继承,所以直接实例化抽象基类就违反了语法规则。


解决方法

方案1(最适配当前场景):不需要做分层设计就直接移除abstract修饰符

修改Button.cs中类的定义行即可,当前你已经完整实现了Draw和Update两个方法,没有未实现的抽象成员,完全可以去掉抽象标识直接使用:

// 删除原来的abstract修饰符
public class Button : Component
{
    // 其余原有代码全部保持不变
}

改完之后就可以正常用new Button()创建实例了。

方案2:需要保留Button作为抽象基类的话,创建具体子类再实例化

如果你后续要做多种不同行为的按钮(比如开关按钮、悬浮特效按钮等),需要保留Button的抽象基类特性,就新增一个普通子类继承Button,再实例化子类即可:

// 新增Controls/StandardButton.cs
public class StandardButton : Button
{
    // 调用父类构造函数
    public StandardButton(Texture2D texture, SpriteFont font) : base(texture, font)
    {
    }
}

然后在Game1.cs中实例化子类:

var randomButton = new StandardButton(Content.Load<Texture2D>("Controls/Button"), Content.Load<SpriteFont>("Fonts/Font"))
{
    // 在这里设置按钮的位置、文字等属性
    Position = new Vector2(100, 100),
    Text = "测试按钮"
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:42:02