为什么Microsoft重载方法Console.Write()和Console.WriteLine()? C#

时间:2017-02-11 07:54:15

标签: c#

为什么Microsoft重载方法Console.Write()和Console.WriteLine()?他们可以制作这样的方法

public void WriteLine(Object ob)
{
   Console.WriteLine(ob.ToString());
}
public static void WriteLine(string value);

但是他们做到了

    public static void WriteLine(bool value);

    public static void WriteLine(float value);

    public static void WriteLine(int value);

    [CLSCompliant(false)]
    public static void WriteLine(uint value);

    public static void WriteLine(long value);

    [CLSCompliant(false)]
    public static void WriteLine(ulong value);

    public static void WriteLine(object value);

    public static void WriteLine(string value);

    public static void WriteLine(double value);

    public static void WriteLine(decimal value);

2 个答案:

答案 0 :(得分:10)

长话短说,微软出于性能原因这样做了。

基于对象的方法需要为每次调用具有值类型对象的Console创建一个抛弃包装器对象。考虑一下你致电

时会发生什么
Console.WriteLine(12345678);

首先,12345678被装入一个对象。然后将对象传递给WriteLine。接下来,WriteLine会在对象上调用ToString。最后,将字符串复制到输出中。

此时,装箱操作中的对象和ToString中的字符串符合垃圾回收条件。微软决定在每个调用中创建两个垃圾对象对于一个像写入控制台那样基本的操作是不可接受的,因此它们提供了你列出的所有重载。

答案 1 :(得分:1)

如果没有超载,你可以将你的原生类型(int,bool,...)打包成对象。在这种情况下,拳击/拆箱是一种无用的性能成本。