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

