文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>由Console.WriteLine想到的

由Console.WriteLine想到的

时间:2011-05-01  来源:HeartLight

由Console.WriteLine想到的

对于匿名对象我们可以这样输出:

 1 var test = new { name="test",Age=22};

2 Console.WriteLine(test);

 

结果是:

           {Name=test,Age=22}

那么这个结果是怎么来的呢,为什么Console.WriteLine可以直接输出test的内容呢,它怎么知道test有多几个字段呢?

由IL DASM中可以看到Console.WriteLine(test)实际上调用的是System.Console::WriteLine(object)

 

我们接着看看System.Console::WriteLine(object)是怎么实现的,.Net中的代码如下:

  1 public virtual void WriteLine(object value)

 2 {
 3     if (value == null)
 4     {
 5         this.WriteLine();
 6     }
 7     else
 8     {
 9         IFormattable formattable = value as IFormattable;
10         if (formattable != null)
11         {
12             this.WriteLine(formattable.ToString(null, this.FormatProvider));
13         }
14         else
15         {
16             this.WriteLine(value.ToString());
17         }
18     }
19 }

 它的执行流程是这样的:

(1)    首先检查对象引用是否为空,如果为空则输出空行。

(2)    否则,就将对象转换为IFormattable接口,IFormattable只包含了一个方法:

 1   [ComVisible(true)]

2 public interface IFormattable
3 {
4     // Methods
5     string ToString(string format, IFormatProvider formatProvider);
6 }

 (3)    如果对象实现了IFormattable接口,则调用具体的格式化输出方法,否则就直接输出对象的值。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载