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

为何‘base’对象的类型是我的具体类型A而非object?

这个问题其实是对C#里base关键字的作用理解有偏差,我来给你拆解清楚:

为什么base的类型是A而不是object?

在C#中,base关键字的核心作用是引用当前类的直接基类实例,而不是直接跳到继承链最顶端的object。举个实际的代码例子,假设你的类结构是这样的:

public class A { }
public class B : A 
{
    public void CheckBaseType()
    {
        // 这里的base指向当前B实例的A部分,类型是A,不是object
        Console.WriteLine(base.GetType()); // 输出结果是A
    }
}

哪怕A本身继承自object,base也只会指向你的类的直接父类,不会自动跳过中间层去引用最顶层的object——这是C#继承机制的设计逻辑,base就是用来让你访问直接父类的成员,而非跨级访问。

为什么base.GetHashCode()没触发object的实现?

这要看你的类A有没有重写GetHashCode():

  • 如果A没有重写GetHashCode(),那你在子类里调用base.GetHashCode(),最终还是会调用object的默认实现,因为A继承的就是object的版本。
  • 如果A已经重写了GetHashCode(),那base.GetHashCode()就会优先调用A的重写版本,而不是object的。

如果你确实需要绕开中间基类,直接调用object的GetHashCode()实现,可以通过强制转换当前实例为object的方式:

public class B : A
{
    public override int GetHashCode()
    {
        // 强制转成object后调用,就能触发object的GetHashCode()
        return ((object)this).GetHashCode();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:17:45