System.Console.WriteLine() 含参数的调用原理

  Console.WriteLine()是我使用最多的方法之一,用于控制台输出。但是说到此方法底层调用的原理,可能有些童鞋就不是很清楚了,下面是我自己的理解:

  1 当我们在控制台输出信息,并且要对传递的参数进行格式化输出时,我们需要调用Console.WriteLine()方法,例如:

  int num = 43;

  Console.WriteLine("This is a {0:E} number",num);

  2 那么程序底层是如何调用此方法的呢?

  首先,它会将所有参数传递给String.Format()方法,String.Format("This is a {0:E} number",num);

  之后,String.Format方法会根据参数的位置对字符串进行分解,并传递给相应的StringBuffer.例如:

  String.Format("This is a {0:E} number",num)可以划分为:

      StringBuilder temp = new StringBuilder("This is a ");

      temp.AppendFormat("{0,1}",num);

      temp.Append(" number");

  由上可知,String.Format()根据具体的情况将需要格式化的参数传递给StringBuilder.AppendFormat()方法,而无需格式化的字符串传递给        StringBuilder.Append();

  最后String.AppendFormat()会根据传递的参数,判断此参数是否实现了IFormatable接口,如果实现就调用该接口的方法public string ToString(string format,IFormatProvider formatProvider);,如果没有实现此接口,就调用从object继承的方法ToString();

posted on 2011-06-04 02:43  Dely  阅读(905)  评论(0编辑  收藏  举报

导航