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

3
为什么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);

1
对象意味着装箱/拆箱。 - Christian Gollhardt
但是 int、float 和 bool 类型不能表示大数值。 - Erik Hakobyan
2个回答

11

长话短说,微软之所以这样做是为了提高性能。

基于对象的方法需要为每个值类型对象调用Console创建一个一次性的包装器对象。考虑当您调用时会发生什么:

Console.WriteLine(12345678);

首先,12345678被装箱成一个对象。然后将该对象传递给WriteLine。接下来,WriteLine调用该对象的ToString方法。最后,字符串被复制到输出中。

此时,装箱操作创建的对象和ToString方法生成的字符串都已经可以进行垃圾回收。Microsoft决定,在如此基本的控制台写入操作中创建两个垃圾对象是不可接受的,因此他们提供了你所列出的所有重载。


1

不要将原生类型(如int,bool等)装箱为对象。在这种情况下,装箱/拆箱是一种无用的性能损耗。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接