2017-02-11 43 views
3

爲什麼微軟重載方法Console.Write()和Console.WriteLine()?他們可以使方法這樣爲什麼微軟重載方法Console.Write()和Console.WriteLine()? C#

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

對象表示裝箱/拆箱 –

+0

但int,float,bool不能是大值 –

回答

10

長話短說,微軟這樣做是出於性能的考慮。

基於對象的方法需要爲每次使用值類型對象調用控制檯時創建一個不重複的包裝器對象。考慮當你打電話時會發生什麼

Console.WriteLine(12345678); 

首先,12345678被裝箱成一個物體。然後該對象被傳遞給WriteLine。接下來,WriteLine在對象上調用ToString。最後,該字符串被複制到輸出中。

此時,來自裝箱操作的對象和來自ToString的字符串變爲有資格進行垃圾收集。微軟決定創建兩個垃圾對象作爲每個調用的一部分對於寫入控制檯這樣基本的操作來說是不可接受的,因此他們提供了所列出的所有重載。

1

如果沒有重載,您必須將您的本機類型(int,bool,...)包裝爲對象。在這種情況下,拳擊/拆箱是無用的性能成本。

相關問題