我正在与Microsoft学院一起学习C#,在日期和时间的课程中,视频的制作者在日期使用了ToString
方法。 例如:
DateTime myValue = DateTime.Now;
Console.WriteLine(myValue.ToString());
Console.ReadLine();
当我删除ToString
方法时,我得到了相同的结果,我认为它用于数据用途,但保持原样而不是将其转换为string
不是更好吗?
这可能是出于教学目的,以表明string
是从myValue.ToString()
获得的,而不是依靠Console.WriteLine()
为您转换它。初学者可能不知道转换,并且明确表明string
是从.ToString()
获得的。
仅仅编写Console.WriteLine(myValue);
可能会导致新学习者包含对象,而无需先创建其ToString()
,然后调用其 .ToString()
.
下面显示了一个示例:
public void ShowExample()
{
DateTime myValue = DateTime.Now;
Console.WriteLine(myValue.ToString()); // 5/1/2018 10:14:20 AM
Foo myFoo= new Foo(); // Has no ToString method
Console.WriteLine(myFoo); // ConsoleApplication.Foo
Bar myBar = new Bar(); // Has custom ToString method
Console.WriteLine(myBar); // Hi I'm from ToString()
Console.ReadLine();
}
public class Foo
{
int val = 9;
}
public class Bar
{
public override string ToString()
{
return "Hi I'm from ToString()";
}
}
它无需.ToString()
即可工作,因为它具有接受Object
参数的重载Console.WriteLine()
。由于一切都派生自 Object
,并且Object
有自己的ToString()
方法,如果没有更好的匹配,这个版本的方法可以接受任何东西并尝试打印它。
你可以像这样考虑重载方法:
public static void WriteLine(object value)
{
WriteLine(value.ToString());
}
。这样,此重载又调用string
重载。
.Net是一个强类型平台。了解您正在处理语句的每个部分的类型是值得的。
对于DateTime
值,它们不会以人类可读的格式在内部存储。如果您想在打印到控制台时看到一个漂亮的"5/1/2018
"或"2018-05-01
"值,这些都是字符串,您需要以某种方式将DateTime
转换为string
。在代码中执行此操作,而不是让 Object 重载处理它,可以更轻松地返回并具体说明所需的格式。但任何一个版本都真的"还行"。
方法Console.WriteLine()
有许多重载。其中之一是 Console.WriteLine(string s)
.您在第一个示例中使用它。它打印直接传递的字符串参数。
另一个过载是 Console.WriteLine(object o)
.它接受任何实例(因为每个类型都派生自 object
(,并在内部调用 Object.ToString()
方法,然后打印生成的字符串。从object
派生的每个类型都继承 ToString()
方法,并且可以像DateTime
一样重写它。 这就是您可以在第二个示例中删除ToString()
的原因。