加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在基类中标记ToString虚拟,会发生什么?

发布时间:2020-12-15 20:02:41 所属栏目:百科 来源:网络整理
导读:考虑以下( LinqPad)示例. X类中的ToString标记为虚拟.为什么这里的输出不等于“嗨,我是Y,嗨,我是X”,而是打印出类型名称?当然标记ToString virtual是错误的,因为它在Object中被定义为虚拟,我只是想了解这里发生了什么. void Main(){ Y y = new Y(); Console
考虑以下( LinqPad)示例. X类中的ToString标记为虚拟.为什么这里的输出不等于“嗨,我是Y,嗨,我是X”,而是打印出类型名称?当然标记ToString virtual是错误的,因为它在Object中被定义为虚拟,我只是想了解这里发生了什么.

void Main()
{
    Y y = new Y();
    Console.WriteLine(y);
}

// Define other methods and classes here

class X
{
  public virtual String ToString() 
  {
    return "Hi,I'm X";
  }
}

class Y : X
{
  public override String ToString() 
  {
    return "Hi,I'm Y," + base.ToString();
  }
}

解决方法

那就是在X中创建一个名为ToString()的新虚拟方法,它隐藏了Object.ToString().所以如果你有:

Y y = new Y();
X x = y;
Object o = y;

Console.WriteLine(y.ToString()); // Shows "Hi,Hi,I'm X";
Console.WriteLine(x.ToString()); // Shows "Hi,I'm X";
Console.WriteLine(o.ToString()); // Calls object.ToString; shows just "Y"

打电话给

Console.WriteLine(y);

相当于最后一行,这就是打印类型名称的原因.

基本上,您的X.ToString方法应该覆盖object.ToString()方法:

public override String ToString() 
{
    return "Hi,I'm X";
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读