Che cosa chiama Console.WriteLine () dietro le quinte? [chiuso]

3

Sono interessato a come chiamare Console.WriteLine () visualizza effettivamente il testo.

Ho dato un'occhiata al codice sorgente da: link e può vedere che questo metodo da TextWriter finisce per essere chiamato:

        // Writes a character to the text stream. This default method is empty,
        // but descendant classes can override the method to provide the
        // appropriate functionality.
        //
        public virtual void Write(char value) {
        }

Qual è la classe discendente che sovrascrive questo metodo? E qual è l'implementazione?

    
posta Backwards_Dave 03.06.2016 - 10:48
fonte

2 risposte

8

Controlla la fonte dal coreCLR succursale, che Microsoft sta ospitando su github:

    [SecuritySafeCritical]
    static Console()
    {
        _outputHandle = new SafeFileHandle(Win32Native.GetStdHandle(Win32Native.STD_OUTPUT_HANDLE), false);
    }

    [SecuritySafeCritical]
    public static unsafe void Write(string s)
    {
        byte[] bytes = Encoding.UTF8.GetBytes(s);
        fixed (byte * pBytes = bytes)
        {
            int bytesWritten;
            Win32Native.WriteFile(_outputHandle, pBytes, bytes.Length, out bytesWritten, IntPtr.Zero);
        }
    }

Ci sono due cose da fare qui: nel codice statico, il codice sta ottenendo un handle Win32 nel file virtuale STD_OUTPUT, che avvolge l'output standard nella console collegata al processo. E nel metodo Write, sta scrivendo i dati su quel file.

Fondamentalmente, avvolge le funzionalità del sistema operativo interno per la scrittura su una console, che è un file virtuale.

    
risposta data 03.06.2016 - 11:08
fonte
2

Basato sulla fonte di riferimento:

risposta data 03.06.2016 - 18:39
fonte

Leggi altre domande sui tag