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

C#继承报错:值类型需为object以匹配重写成员的解决办法

问题描述

我定义了一个包含返回object类型抽象方法的抽象类:

public abstract class MyAbstractClass
{
    public abstract object MyAbstractMethod();
}

使用引用类型(如string)实现该类时可正常运行:

public class MyClass : MyAbstractClass
{   
    public override string MyAbstractMethod()
    {
        return "Hi StackOverflow !!!";
    }
}

但尝试使用bool、int等值类型实现时:

public class MyClass : MyAbstractClass
{   
    public override bool MyAbstractMethod()
    {
        return true;
    }
}

会报错:

type must be 'object' to match overridden member

我知道报错原因是值类型并非object类型,但如何在不将值类型包装为object的前提下解决该问题?是否可行?

解决方案

可行,使用泛型抽象类就能解决这个问题,无需对值类型进行装箱操作。

将抽象类修改为泛型版本,让返回类型由泛型参数指定:

public abstract class MyAbstractClass<T>
{
    public abstract T MyAbstractMethod();
}

这样不管是引用类型还是值类型,都可以直接实现:

  • 引用类型(string)实现:
public class StringClass : MyAbstractClass<string>
{   
    public override string MyAbstractMethod()
    {
        return "Hi StackOverflow !!!";
    }
}
  • 值类型(bool)实现:
public class BoolClass : MyAbstractClass<bool>
{   
    public override bool MyAbstractMethod()
    {
        return true;
    }
}
  • 值类型(int)实现:
public class IntClass : MyAbstractClass<int>
{   
    public override int MyAbstractMethod()
    {
        return 42;
    }
}

泛型能在编译时确定返回类型,既避免了值类型装箱的性能开销,又能严格保证类型安全,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:42:55