当前位置: 首页 > 编程语言 > C#

Console.Writeline基础知识分享

时间:2023-04-10 10:44:57 C#

Console.Writeline基础知识我遇到以下代码的问题:classCurrentDate{staticvoidMain(){Console.WriteLine(DateTime.Now);}}文档说:使用指定的格式信息将指定对象数组的文本表示(后跟当前行终止符)写入标准输出流。所以我的问题是:WriteLine如何知道DateTime对象的文本表示形式?我的意思是,如果我从自己的类创建自己的对象,它怎么知道如何将值转换为文本?更重要的是,它怎么知道值是多少?你如何定义一个对象的“值”?WriteLine如何知道DateTime对象的文本表示?我的意思是,如果我从自己的类创建自己的对象,它怎么知道如何将值转换为文本?Console.WriteLine有一组匹配特定类型(主要是原语)的重载。如果编译器不匹配所提供类型的重载,它会匹配重载System.Object(它授予您一个参数)。如果发生这种情况,它会检查该类型是否实现了IFormattable,如果是,则调用IFormattable.ToString(null,Formatter)。如果不是,它会在您的对象上调用ToString。ToString定义在System.Object中,所有对象都继承自它。每个需要自定义表示的对象都会覆盖默认行为,就像DateTime所做的那样。例如,假设您有一个带有Bar字符串属性的Foo类,并且您希望Console.WriteLine在Foo传递给它时打印一些有意义的东西:publicclassFoo{publicstringBar{get;放;}publicoverridestringToString(){returnBar;现在我们将它传递给Console.WriteLine:publicstaticvoidMain(string[]args){varfoo=newFoo{Bar="bar"};控制台.WriteLine(foo);}将产生“酒吧”。由于Console.WriteLine(DateTime)没有重载,因此会调用Console.WriteLine(Object)重载,并且此重载会调用TextWriter.WriteLine(object)重载,其实现方式为:IFormattablef=valueasIFormattable;如果(f!=null)WriteLine(f.ToString(null,FormatProvider));否则WriteLine(value.ToString());如您所见,此方法检查此对象类型是否实现了IFormattable接口。由于Datetime实现了此接口,因此它将f.ToString(null,FormatProvider)。从该方法的文档中可以看出,第一个参数是:空引用(在VisualBasic中为Nothing),使用为实现IFormattable的类型定义的默认格式。从DateTime.ToString(String,IFormatProvider)方法的文档中可以看出:如果format为null或空字符串(""),则使用标准格式说明符“G”。这意味着,表示形式将是属于您的CurrentCulture的ShortDatePattern和LongTimePattern属性的组合。如果您需要为自定义类设置特殊格式,您可以覆盖该类型的.ToString()方法以更改其行为。与一些人的想法相反,DateTime.ToString()没有被调用。在.NET中,对象可以通过两种方式“序列化”自身:重写字符串Object.ToString()方法和实现IFormattable接口。DateTime并发执行。现在......当你尝试做Console.WriteLine(DateTime.Now);选择voidpublicstaticvoidWriteLine(Objectvalue)重载(如果在VisualStudio中按住Ctrl键并单击WriteLine,就可以看到它)。此方法只是调用TextWriter.WriteLine(value)方法,其中:IFormattablef=valueasIFormattable;如果(f!=null)WriteLine(f.ToString(null,FormatProvider));否则WriteLine(value.ToString());所有这些都可以使用ILSpy轻松查看并查找Console.WriteLine。以上就是C#学习教程:Console.Writeline基础知识分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: