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();