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

C#值类型调用ToString方法疑问:为何返回值而非类型名?

问题解答

先看你给出的代码:

One hh = new();
Console.WriteLine(hh.ToString());
Int32 ww = 77;
Console.WriteLine(ww.ToString());
Console.WriteLine(5.ToString());

你提到未重写ToString的One类调用方法返回类名,这是因为Object类的默认ToString实现就是返回当前类型的名称。而Int32(也就是C#里的int)之所以返回数值本身,核心原因是:

  • Int32已经重写了Object类的ToString方法,它的重写版本会返回自身数值的字符串表示,而不是类型名称。

关于你疑惑的装箱问题:

  1. 值类型调用自身的实例方法时,.NET Runtime会做优化,不需要装箱就能直接调用。比如ww.ToString()或者5.ToString(),都是直接在值类型实例上调用重写后的方法,不会触发装箱操作。
  2. 就算真的发生了装箱(比如把int转成Object后调用ToString),因为多态的特性,调用的依然是Int32重写的版本,还是会返回数值字符串,而不是Object的默认类型名称。

简单来说,就是Int32自己重新实现了ToString方法,所以行为和你自定义的未重写该方法的One类不一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:15:41