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

本文详细解析了Console.WriteLine()方法的底层工作原理,包括如何通过String.Format()方法进行格式化输出,以及如何将参数传递给StringBuilder进行处理。最后介绍了如何根据参数是否实现IFormatable接口来决定调用的具体方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://www.cnblogs.com/Dely/archive/2011/06/04/2072411.html

using UnityEngine; using System.Collections; using UnityEngine.UI; using ConsoleTestWindows; using XLua; namespace LuaFramework { /// <summary> /// </summary> [LuaCallCSharp] public class Main : MonoBehaviour { private ConsoleWindow consoleWin; //public string ResUrl; public string WebUrl; public string AgentID; public string UIVersion; public int GameCode; public bool updateMode; void Start() { AppConst.GameCode = GameCode; #if UNITY_EDITOR AppConst.UpdateMode = updateMode; AppConst.UIVersion = UIVersion; AppConst.WebUrl = WebUrl; AppConst.AgentID = AgentID; consoleWin = new ConsoleWindow(); consoleWin.Initialize(); consoleWin.SetTitle("Lua_Dating"); #endif //Debug.LogError("Main Start**********************************"); //System.Console.OutputEncoding = System.Text.Encoding.Default; AppFacade.Instance.StartUp(); //启动游戏 } public static void consoleprint(string str, int color) { switch(color) { case 1: System.Console.ForegroundColor = System.ConsoleColor.Black; break; case 2: System.Console.ForegroundColor = System.ConsoleColor.DarkBlue; break; case 3: System.Console.ForegroundColor = System.ConsoleColor.DarkGreen; break; case 4: System.Console.ForegroundColor = System.ConsoleColor.DarkCyan; break; case 5: System.Console.ForegroundColor = System.ConsoleColor.DarkRed; break; case 6: System.Console.ForegroundColor = System.ConsoleColor.DarkMagenta; break; case 7: System.Console.ForegroundColor = System.ConsoleColor.DarkYellow; break; case 8: System.Console.ForegroundColor = System.ConsoleColor.Gray; break; case 9: System.Console.ForegroundColor = System.ConsoleColor.DarkGray; break; case 10: System.Console.ForegroundColor = System.ConsoleColor.Blue; break; case 11: System.Console.ForegroundColor = System.ConsoleColor.Green; break; case 12: System.Console.ForegroundColor = System.ConsoleColor.Cyan; break; case 13: System.Console.ForegroundColor = System.ConsoleColor.Red; break; case 14: System.Console.ForegroundColor = System.ConsoleColor.Magenta; break; case 15: System.Console.ForegroundColor = System.ConsoleColor.Yellow; break; default: System.Console.ForegroundColor = System.ConsoleColor.White; break; } System.Console.WriteLine(str); } private void OnDestroy() { #if UNITY_EDITOR consoleWin.Shutdown(); #endif } } }
最新发布
07-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值