首页 新闻 会员 周边 捐助

关于ToString()的问题

0
[已解决问题] 解决于 2012-04-10 20:24

C#中,假设p1是一个类的实例,并且重写了ToString方法,那么

Console.WriteLine(p1);为什么会输出p1.ToString()的结果?

貌似就算不重写输出的也是ToString的结果,是因为自动就调用么?不用显式的写p1.ToString()么?

微澜的主页 微澜 | 初学一级 | 园豆:-1
提问于:2012-04-08 21:01
< >
分享
最佳答案
2
public virtual void WriteLine(object value)
{
if (value == null)
{
this.WriteLine();
}
else
{
IFormattable formattable = value as IFormattable;
if (formattable != null)
{
this.WriteLine(formattable.ToString(null, this.FormatProvider));
}
else
{
this.WriteLine(value.ToString());
}
}
}


 看看这个就明白了,内部是这样实现的。

奖励园豆:5
Halower | 小虾三级 |园豆:1723 | 2012-04-09 00:38

谢谢,这个代码是怎么看的?

微澜 | 园豆:-1 (初学一级) | 2012-04-09 21:31

谢谢,这个代码是怎么看的?

微澜 | 园豆:-1 (初学一级) | 2012-04-09 21:31

谢谢,这个代码是怎么看的?是从哪里看的

微澜 | 园豆:-1 (初学一级) | 2012-04-09 21:32

@微澜: 反射工具,留你QQ我发给你

Halower | 园豆:1723 (小虾三级) | 2012-04-09 21:39
其他回答(3)
0

因为Console.WriteLine也是个方法啊。。这个方法里输出的是p1.ToString的结果啊。。你去看源代码好了

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-08 21:16

什么源代码?

支持(0) 反对(0) 微澜 | 园豆:-1 (初学一级) | 2012-04-08 22:51

@微澜: .Net Framework的源代码. 反编译一下自己看看.

支持(0) 反对(0) sun1991 | 园豆:200 (初学一级) | 2012-04-08 23:05

@反对者:给个理由?

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-09 10:16
0

d应为在C#中所有的对象都是集成于object的,在object中就包括一个ToString()的方法,在调动Console.WriteLine(object obj)时,应该是调用对象的ToString()方法。

yangtam | 园豆:369 (菜鸟二级) | 2012-04-08 23:15
0

c#的所有引用类型都继承自object。它默认提供一个ToString方法,如果你想输出特殊的格式需要自定义

如:

class person

{

string firstname;

string lastName;

public override string ToString()

{

return string.format({0}-{1}“,firstName,lastName);
}

}

viola | 园豆:211 (菜鸟二级) | 2012-04-09 23:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册