本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

Console 类

 

表示控制台应用程序的标准输入流、输出流和错误流。 无法继承此类。

若要浏览此类型的.NET Framework 源代码,请参阅Reference Source

命名空间:   System
程序集:  mscorlib(位于 mscorlib.dll)


public static class Console

名称说明
System_CAPS_pubpropertySystem_CAPS_staticBackgroundColor

获取或设置控制台的背景色。

System_CAPS_pubpropertySystem_CAPS_staticBufferHeight

获取或设置缓冲区的高度。

System_CAPS_pubpropertySystem_CAPS_staticBufferWidth

获取或设置缓冲区的宽度。

System_CAPS_pubpropertySystem_CAPS_staticCapsLock

获取一个值,该值指示 Caps Lock 键盘切换键是打开的还是关闭的。

System_CAPS_pubpropertySystem_CAPS_staticCursorLeft

获取或设置光标在缓冲区中的列位置。

System_CAPS_pubpropertySystem_CAPS_staticCursorSize

获取或设置光标在字符单元格中的高度。

System_CAPS_pubpropertySystem_CAPS_staticCursorTop

获取或设置光标在缓冲区中的行位置。

System_CAPS_pubpropertySystem_CAPS_staticCursorVisible

获取或设置一个值,用以指示光标是否可见。

System_CAPS_pubpropertySystem_CAPS_staticError

获取标准错误输出流。

System_CAPS_pubpropertySystem_CAPS_staticForegroundColor

获取或设置控制台的前景色。

System_CAPS_pubpropertySystem_CAPS_staticIn

获取标准输入流。

System_CAPS_pubpropertySystem_CAPS_staticInputEncoding

获取或设置控制台用于读取输入的编码。

System_CAPS_pubpropertySystem_CAPS_staticIsErrorRedirected

获取指示错误输出流是否已经从标准错误流被再定位的值。

System_CAPS_pubpropertySystem_CAPS_staticIsInputRedirected

获取指示输入是否已从标准输入流中重定向的值。

System_CAPS_pubpropertySystem_CAPS_staticIsOutputRedirected

获取指示输出是否已从标准输入流中重定向的值。

System_CAPS_pubpropertySystem_CAPS_staticKeyAvailable

获取一个值,该值指示按键操作在输入流中是否可用。

System_CAPS_pubpropertySystem_CAPS_staticLargestWindowHeight

根据当前字体和屏幕分辨率获取控制台窗口可能具有的最大行数。

System_CAPS_pubpropertySystem_CAPS_staticLargestWindowWidth

根据当前字体和屏幕分辨率获取控制台窗口可能具有的最大列数。

System_CAPS_pubpropertySystem_CAPS_staticNumberLock

获取一个值,该值指示 Num Lock 键盘切换键是打开的还是关闭的。

System_CAPS_pubpropertySystem_CAPS_staticOut

获取标准输出流。

System_CAPS_pubpropertySystem_CAPS_staticOutputEncoding

获取或设置控制台用于写入输出的编码。

System_CAPS_pubpropertySystem_CAPS_staticTitle

获取或设置要显示在控制台标题栏中的标题。

System_CAPS_pubpropertySystem_CAPS_staticTreatControlCAsInput

获取或设置一个值,该值指示是将修改键 Control 和控制台键 C 的组合 (Ctrl+C) 视为普通输入,还是视为由操作系统处理的中断。

System_CAPS_pubpropertySystem_CAPS_staticWindowHeight

获取或设置控制台窗口区域的高度。

System_CAPS_pubpropertySystem_CAPS_staticWindowLeft

获取或设置控制台窗口区域的最左边相对于屏幕缓冲区的位置。

System_CAPS_pubpropertySystem_CAPS_staticWindowTop

获取或设置控制台窗口区域的最顶部相对于屏幕缓冲区的位置。

System_CAPS_pubpropertySystem_CAPS_staticWindowWidth

获取或设置控制台窗口的宽度。

名称说明
System_CAPS_pubmethodSystem_CAPS_staticBeep()

通过控制台扬声器播放提示音。

System_CAPS_pubmethodSystem_CAPS_staticBeep(Int32, Int32)

通过控制台扬声器播放具有指定频率和持续时间的提示音。

System_CAPS_pubmethodSystem_CAPS_staticClear()

清除控制台缓冲区和相应的控制台窗口的显示信息。

System_CAPS_pubmethodSystem_CAPS_staticMoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32)

将屏幕缓冲区的指定源区域复制到指定的目标区域。

System_CAPS_pubmethodSystem_CAPS_staticMoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32, Char, ConsoleColor, ConsoleColor)

将屏幕缓冲区的指定源区域复制到指定的目标区域。

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardError()

获取标准错误流。

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardError(Int32)

获取设置为指定缓冲区大小的标准错误流。

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardInput()

获取标准输入流。

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardInput(Int32)

获取设置为指定缓冲区大小的标准输入流。

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardOutput()

获取标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticOpenStandardOutput(Int32)

获取设置为指定缓冲区大小的标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticRead()

从标准输入流读取下一个字符。

System_CAPS_pubmethodSystem_CAPS_staticReadKey()

获取用户按下的下一个字符或功能键。 按下的键显示在控制台窗口中。

System_CAPS_pubmethodSystem_CAPS_staticReadKey(Boolean)

获取用户按下的下一个字符或功能键。 按下的键可以选择显示在控制台窗口中。

System_CAPS_pubmethodSystem_CAPS_staticReadLine()

从标准输入流读取下一行字符。

System_CAPS_pubmethodSystem_CAPS_staticResetColor()

将控制台的前景色和背景色设置为默认值。

System_CAPS_pubmethodSystem_CAPS_staticSetBufferSize(Int32, Int32)

将屏幕缓冲区的高度和宽度设置为指定值。

System_CAPS_pubmethodSystem_CAPS_staticSetCursorPosition(Int32, Int32)

设置光标位置。

System_CAPS_pubmethodSystem_CAPS_staticSetError(TextWriter)

Error 属性设置为指定的 TextWriter 对象。

System_CAPS_pubmethodSystem_CAPS_staticSetIn(TextReader)

In 属性设置为指定的 TextReader 对象。

System_CAPS_pubmethodSystem_CAPS_staticSetOut(TextWriter)

Out 属性设置为指定的 TextWriter 对象。

System_CAPS_pubmethodSystem_CAPS_staticSetWindowPosition(Int32, Int32)

设置控制台窗口相对于屏幕缓冲区的位置。

System_CAPS_pubmethodSystem_CAPS_staticSetWindowSize(Int32, Int32)

将控制台窗口的高度和宽度设置为指定值。

System_CAPS_pubmethodSystem_CAPS_staticWrite(Boolean)

将指定的布尔值的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(Char)

将指定的 Unicode 字符值写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(Char[])

将指定的 Unicode 字符数组写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(Char[], Int32, Int32)

将指定的 Unicode 字符子数组写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(Decimal)

将指定的 Decimal 值的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(Double)

将指定的双精度浮点值的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(Int32)

将指定的 32 位有符号整数值的文本表示写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(Int64)

将指定的 64 位有符号整数值的文本表示写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(Object)

将指定对象的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(Single)

将指定的单精度浮点值的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(String)

将指定的字符串值写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(String, Object)

使用指定的格式信息将指定对象的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(String, Object, Object)

使用指定的格式信息将指定对象的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(String, Object, Object, Object)

使用指定的格式信息将指定对象的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(String, Object, Object, Object, Object)

使用指定的格式信息将指定的对象和可变长度参数列表的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(String, Object[])

使用指定的格式信息将指定的对象数组的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(UInt32)

将指定的 32 位无符号整数值的文本表示写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWrite(UInt64)

将指定的 64 位无符号整数值的文本表示写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine()

将当前行终止符写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Boolean)

将指定布尔值的文本表示形式(后跟当前行终止符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Char)

将指定的 Unicode 字符值(后跟当前行终止符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Char[])

将指定的 Unicode 字符数组(后跟当前行终止符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Char[], Int32, Int32)

将指定的 Unicode 字符子数组(后跟当前行终止符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Decimal)

将指定的 Decimal 值的文本表示形式(后跟当前行终止符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Double)

将指定的双精度浮点值的文本表示形式(后跟当前行终止符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Int32)

将指定的 32 位有符号整数值的文本表示(后跟当前行的结束符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Int64)

将指定的 64 位有符号整数值的文本表示(后跟当前行的结束符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Object)

将指定对象的文本表示形式(后跟当前行终止符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(Single)

将指定的单精度浮点值的文本表示形式(后跟当前行终止符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String)

将指定的字符串值(后跟当前行终止符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String, Object)

使用指定的格式信息,将指定对象(后跟当前行终止符)的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String, Object, Object)

使用指定的格式信息,将指定对象的文本表示形式(后跟当前行终止符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String, Object, Object, Object)

使用指定的格式信息,将指定对象的文本表示形式(后跟当前行终止符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String, Object, Object, Object, Object)

使用指定的格式信息,将指定的对象和可变长度参数列表(后跟当前行终止符)的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(String, Object[])

使用指定的格式信息,将指定的对象数组(后跟当前行终止符)的文本表示形式写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(UInt32)

将指定的 32 位无符号的整数值的文本表示(后跟当前行的结束符)写入标准输出流。

System_CAPS_pubmethodSystem_CAPS_staticWriteLine(UInt64)

将指定的 64 位无符号的整数值的文本表示(后跟当前行的结束符)写入标准输出流。

名称说明
System_CAPS_pubeventSystem_CAPS_staticCancelKeyPress

Control 修改键 (Ctrl) 和 ConsoleKey.C console 键 (C) 或 Break 键同时按住(Ctrl+C 或 Ctrl+Break)时发生。

System_CAPS_note说明

若要查看此类型的.NET Framework 源代码,请参阅Reference Source 你可以浏览源代码联机,请下载离线查看的引用并在调试; 过程中逐步执行源 (包括修补程序和更新)see instructions.

在控制台中,其中用户交互与操作系统或与基于文本的控制台应用程序通过计算机键盘输入文本,并从计算机终端读取文本输出操作系统窗口。 例如,在 Windows 操作系统,控制台称为命令提示符窗口,并接受 MS-DOS 命令。 Console类提供基本支持的应用程序读取字符,并向控制台写入字符。

有关开发与信息Console类,请参阅以下各节︰

一个控制台应用程序启动时,操作系统自动将相关联三个 I/O 流与控制台︰ 标准输入流、 标准输出流和标准错误输出流。 你的应用程序可以从标准输入流; 读取用户输入正常的数据写入标准输出流;并将错误数据写入到标准错误输出流。 向应用程序的值作为呈现这些流Console.InConsole.Out,和Console.Error属性。

默认情况下,值In属性是System.IO.TextReader表示键盘和的值的对象OutError属性System.IO.TextWriter表示控制台窗口的对象。 但是,可以设置这些属性为流,以便不表示控制台窗口或键盘;例如,你可以将这些属性设置为表示文件的流。 若要将标准输入、 标准输出或标准错误流重定向,调用Console.SetInConsole.SetOut,或Console.SetError方法,分别。 使用这些流的 I/O 操作保持同步,这意味着多个线程可以读取或写入流。 这意味着,方法是通常异步的如TextReader.ReadLineAsync,如果该对象表示控制台流以同步方式执行。

System_CAPS_note说明

不要使用Console类等服务器应用程序的无人参与应用程序中显示输出。 如调用方法Console.WriteConsole.WriteLineGUI 应用程序中产生任何影响。

Console如果流重定向,例如,到文件,则基础流定向到控制台时正常工作的类成员可能会引发异常。 在应用程序中捕获System.IO.IOException异常如果重定向标准流。 你还可以使用IsOutputRedirectedIsInputRedirected,和IsErrorRedirected属性来确定是否标准流重定向之前正在执行的操作引发System.IO.IOException异常。

有时很有用,以显式调用所表示的流对象的成员InOut,和Error属性。 例如,默认情况下,Console.ReadLine方法从标准输入流读取输入。 同样,Console.WriteLine方法将数据写入标准输出流和数据后跟的默认值的行终止字符串,这是一个回车和换行符 ("\r\n")。 但是,Console类不提供相应的方法将数据写入到标准错误输出流或要更改写入到该流的数据的行终止字符串的属性。

你可以通过设置来解决此问题TextWriter.NewLine属性OutError到另一个行终止字符串的属性。 例如,下面的 C# 语句将标准错误输出流的行终止字符串设置为两个回车符和换行符序列︰

Console.Error.NewLine = "\r\n\r\n";

然后,可以显式调用WriteLine方法的错误输出的流对象,如下面的 C# 语句所示︰

Console.Error.WriteLine();

在控制台的两个密切相关的功能是屏幕缓冲区和控制台窗口。 文本实际读取或写入到流归控制台中,但似乎无法读取或写入到拥有调用屏幕缓冲区的控制台的区域。 屏幕缓冲区是在控制台的属性,组织为行和列的每个网格交集或字符单元格中,其中包含一个字符的一个矩形网格。 每个字符具有其自己的前景颜色,并且每个字符单元格中具有其自己的背景色。

通过调用控制台窗口的矩形区域查看屏幕缓冲区。 控制台窗口是在控制台中; 另一个特性它不是本身,它是操作系统窗口的控制台。 控制台窗口按行和列排列,小于或等于屏幕缓冲区的大小,可以对其进行移动,以查看不同区域的基础的屏幕缓冲区。 如果屏幕缓冲区大于控制台窗口,则控制台都将自动显示滚动条,以便可以通过屏幕缓冲区重新定位控制台窗口。

光标指示的屏幕缓冲区的位置其中文本当前读取或写入。 可以隐藏光标,或将其变得可见,并且可以更改窗体的高度。 如果光标是否可见,因此光标在视图中始终是控制台窗口的位置将自动移动。

屏幕缓冲区中的字符单元格坐标的源是左上的角,和光标和控制台窗口的位置进行计量相对于该原点。 使用从零开始的索引来指定位置;即指定为 0,行和列 0 作为最左边的列的最顶部的行。 行和列索引的最大值是Int16.MaxValue

一般情况下,控制台读取输入,并通过使用默认情况下定义的系统区域设置的当前控制台代码页写入输出。 代码页可以处理可用的 Unicode 字符的一个子集,因此如果你尝试显示字符未映射的特定代码页,控制台将无法显示所有字符或准确地表示它们。 以下示例阐释了此问题。 它尝试向控制台显示到 U + 044F 从 U + 0410年西里尔字母的字符。 如果使用控制台代码页 437 的系统上运行示例,每个字符都替换为问号 (?),因为西里尔语字符不映射到代码页 437 中的字符。

using System;

public class Example
{
   public static void Main()
   {
      // Create a Char array for the modern Cyrillic alphabet, 
      // from U+0410 to U+044F.
      int nChars = 0x044F - 0x0410 + 1;
      char[] chars = new char[nChars];
      ushort codePoint = 0x0410;
      for (int ctr = 0; ctr < chars.Length; ctr++) {
        chars[ctr] = Convert.ToChar(codePoint);
        codePoint++;
      }   

      Console.WriteLine("Current code page: {0}\n", 
                        Console.OutputEncoding.CodePage);
      // Display the characters.
      foreach (var ch in chars) {
         Console.Write("{0}  ", ch);
         if (Console.CursorLeft >= 70) 
            Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    Current code page: 437
//    
//    ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?
//    ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?
//    ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?

除了支持代码页,Console类支持 utf-8 编码与UTF8Encoding类。 从.NET Framework 4.5,开始Console类还支持使用编码的 utf-16UnicodeEncoding类。 若要向控制台显示 Unicode 字符。 你设置OutputEncoding属性为UTF8EncodingUnicodeEncoding

Unicode 字符的支持需要编码器来识别特定的 Unicode 字符,并且还需要具有需要呈现该字符的标志符号的字体。 若要成功向控制台显示 Unicode 字符,必须为非光栅或 TrueType 字体,例如 Consolas 或 Lucida Console 设置控制台字体。 下面的示例演示如何以编程方式更改字体从光栅字体到 Lucida Console。

using System;
using System.Runtime.InteropServices;

public class Example
{
   [DllImport("kernel32.dll", SetLastError = true)]
   static extern IntPtr GetStdHandle(int nStdHandle);

   [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
   static extern bool GetCurrentConsoleFontEx(
          IntPtr consoleOutput, 
          bool maximumWindow,
          ref CONSOLE_FONT_INFO_EX lpConsoleCurrentFontEx);

   [DllImport("kernel32.dll", SetLastError = true)]
   static extern bool SetCurrentConsoleFontEx(
          IntPtr consoleOutput, 
          bool maximumWindow,
          CONSOLE_FONT_INFO_EX consoleCurrentFontEx);

   private const int STD_OUTPUT_HANDLE = -11;
   private const int TMPF_TRUETYPE = 4;
   private const int LF_FACESIZE = 32;
   private static IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);

   public static unsafe void Main()
   {
      string fontName = "Lucida Console";
      IntPtr hnd = GetStdHandle(STD_OUTPUT_HANDLE);
      if (hnd != INVALID_HANDLE_VALUE) {
         CONSOLE_FONT_INFO_EX info = new CONSOLE_FONT_INFO_EX();
         info.cbSize = (uint) Marshal.SizeOf(info);
         bool tt = false;
         // First determine whether there's already a TrueType font.
         if (GetCurrentConsoleFontEx(hnd, false, ref info)) {
            tt = (info.FontFamily & TMPF_TRUETYPE) == TMPF_TRUETYPE;
            if (tt) {
               Console.WriteLine("The console already is using a TrueType font.");
               return;
            }
            // Set console font to Lucida Console.
            CONSOLE_FONT_INFO_EX newInfo = new CONSOLE_FONT_INFO_EX();
            newInfo.cbSize = (uint) Marshal.SizeOf(newInfo);          
            newInfo.FontFamily = TMPF_TRUETYPE;
            IntPtr ptr = new IntPtr(newInfo.FaceName);
            Marshal.Copy(fontName.ToCharArray(), 0, ptr, fontName.Length);
            // Get some settings from current font.
            newInfo.dwFontSize = new COORD(info.dwFontSize.X, info.dwFontSize.Y);
            newInfo.FontWeight = info.FontWeight;
            SetCurrentConsoleFontEx(hnd, false, newInfo);
         }
      }    
    }

   [StructLayout(LayoutKind.Sequential)]
   internal struct COORD
   {
      internal short X;
      internal short Y;

      internal COORD(short x, short y)
      {
         X = x;
         Y = y;
      }
   }

   [StructLayout(LayoutKind.Sequential)]
   internal unsafe struct CONSOLE_FONT_INFO_EX 
   {
      internal uint cbSize;
      internal uint nFont;
      internal COORD dwFontSize;
      internal int FontFamily;
      internal int FontWeight;
      internal fixed char FaceName[LF_FACESIZE];
   } 
}

但是,TrueType 字体可以显示标志符号的一个子集。 例如,Lucida Console 字体显示仅 643 的从 U + 0021 到 U + FB02 大约 64,000 可用字符。 若要查看其字符特定字体支持,请打开字体小程序中 Control Panel 中,选择查找字符选项,然后选择想要其字符集的字体中要检查字体列表字符映射表窗口。

Windows 使用字体链接显示在特定字体中不可用的标志符号。 有关链接以显示其他字符集的字体的信息,请参阅Globalization Step-by-Step: Fonts 在注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink 子项中定义链接的字体。 此子项与关联的每个条目对应于基字体的名称,其值为一个字符串数组定义的字体文件,并链接到基字体的字体。 该数组的每个成员定义链接的字体,并采用形式字体文件名字体名称 下面的示例演示如何以编程方式定义名为 SimSun 名为显示简化汉字字符的 simsun.ttc 的字体文件中找到的链接的字体。

using Microsoft.Win32;
using System;

public class Example
{
   public static void Main()
   {
      string valueName = "Lucida Console";
      string newFont = "simsun.ttc,SimSun";
      string[] fonts = null;
      RegistryValueKind kind = 0; 
      bool toAdd;

      RegistryKey key = Registry.LocalMachine.OpenSubKey( 
                 @"Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink", 
                 true);
      if (key == null) {
         Console.WriteLine("Font linking is not enabled.");
      }
      else {
         // Determine if the font is a base font.
         string[] names = key.GetValueNames();
         if (Array.Exists(names, s => s.Equals(valueName, 
                                      StringComparison.OrdinalIgnoreCase))) {
            // Get the value's type.
            kind = key.GetValueKind(valueName);

            // Type should be RegistryValueKind.MultiString, but we can't be sure.
            switch (kind) {
               case RegistryValueKind.String:
                  fonts = new string[] { (string) key.GetValue(valueName) };
                  break;   
               case RegistryValueKind.MultiString:
                  fonts = (string[]) key.GetValue(valueName);
                  break;
               case RegistryValueKind.None:
                  // Do nothing.
                  fonts = new string[] { };
                  break;
            } 
            // Determine whether SimSun is a linked font.
            if (Array.FindIndex(fonts, s =>s.IndexOf("SimSun", 
                                       StringComparison.OrdinalIgnoreCase) >=0) >= 0) {
               Console.WriteLine("Font is already linked.");
               toAdd = false;
            }
            else {
               // Font is not a linked font.
               toAdd = true;
            }
         }
         else {
            // Font is not a base font.
            toAdd = true;
            fonts = new string[] { };
         }

         if (toAdd) {  
            Array.Resize(ref fonts, fonts.Length + 1);
            fonts[fonts.GetUpperBound(0)] = newFont;
            // Change REG_SZ to REG_MULTI_SZ.
            if (kind == RegistryValueKind.String)
               key.DeleteValue(valueName, false);

            key.SetValue(valueName, fonts, RegistryValueKind.MultiString);
            Console.WriteLine("SimSun added to the list of linked fonts.");
         }                     
      }

      if (key != null) key.Close();
   }
}

Unicode 支持控制台具有以下限制︰

  • 不支持 utf-32 编码。 唯一受支持的 Unicode 编码为 utf-8 和 utf-16,由表示UTF8EncodingUnicodeEncoding类,分别。

  • 不支持双向输出。

  • 显示基本多语言平面外的字符 (即代理项对的) 不支持,即使它们链接的字体文件中定义。

  • 不支持显示复杂脚本中的字符。

  • 组合字符序列 (即,基字符和一个或多个组合字符组成的字符) 将显示为不同的字符。 若要解决此限制,你可以通过调用显示的字符串规范化String.Normalize方法,然后才能将输出发送到控制台。 在下面的示例中,一个字符串,包含组合字符序列 U + 0061 U + 0308年显示到控制台,为两个字符之前进行了规范化输出字符串,并作为单个字符后String.Normalize调用方法。

    using System;
    using System.IO;
    
    public class Example
    {
       public static void Main()
       {
          char[] chars = { '\u0061', '\u0308' };
    
          string combining = new String(chars);
          Console.WriteLine(combining);
    
          combining = combining.Normalize();
          Console.WriteLine(combining);
       }
    }
    // The example displays the following output:
    //       a"
    //       ä
    

    请注意规范化是可行的解决方案,仅当标准字符包含对应于特定 combining 一个预先撰写窗体的 Unicode 字符序列。

  • 如果一种字体为专用区域中的代码点提供的标志符号,则将显示该标志符号。 但是,由于专用区域中的字符是特定于应用程序,这可能不是预期的标志符号。

下面的示例向控制台显示一系列的 Unicode 字符。 此示例接受三个命令行参数︰ 要显示,请显示,以及是否使用当前控制台编码范围的末尾的范围开始 (false) 或 utf-16 编码 (true)。 它假定控制台正在使用 TrueType 字体。

using System;
using System.IO;
using System.Globalization;
using System.Text;

public static class DisplayChars
{
   private static void Main(string[] args)
   {
      uint rangeStart = 0;
      uint rangeEnd = 0;
      bool setOutputEncodingToUnicode = true;
      // Get the current encoding so we can restore it.
      Encoding originalOutputEncoding = Console.OutputEncoding;

   	try
   	{
         switch(args.Length)
         {
            case 2:
               rangeStart = uint.Parse(args[0], NumberStyles.HexNumber);
               rangeEnd = uint.Parse(args[1], NumberStyles.HexNumber);
               setOutputEncodingToUnicode = true;
               break;
            case 3:
               if (! uint.TryParse(args[0], NumberStyles.HexNumber, null, out rangeStart))
                  throw new ArgumentException(String.Format("{0} is not a valid hexadecimal number.", args[0]));

               if (!uint.TryParse(args[1], NumberStyles.HexNumber, null, out rangeEnd))
                  throw new ArgumentException(String.Format("{0} is not a valid hexadecimal number.", args[1]));

               bool.TryParse(args[2], out setOutputEncodingToUnicode);
               break;
            default:
               Console.WriteLine("Usage: {0} <{1}> <{2}> [{3}]", 
                                 Environment.GetCommandLineArgs()[0], 
                                 "startingCodePointInHex", 
                                 "endingCodePointInHex", 
                                 "<setOutputEncodingToUnicode?{true|false, default:false}>");
               return;
         }

         if (setOutputEncodingToUnicode) {
            // This won't work before .NET Framework 4.5.
            try {
               // Set encoding using endianness of this system.
               // We're interested in displaying individual Char objects, so 
               // we don't want a Unicode BOM or exceptions to be thrown on
               // invalid Char values.
               Console.OutputEncoding = new UnicodeEncoding(! BitConverter.IsLittleEndian, false); 
               Console.WriteLine("\nOutput encoding set to UTF-16");
            }
            catch (IOException) {
               Console.OutputEncoding = new UTF8Encoding();
               Console.WriteLine("Output encoding set to UTF-8");
            }
         }
         else {
            Console.WriteLine("The console encoding is {0} (code page {1})", 
                              Console.OutputEncoding.EncodingName,
                              Console.OutputEncoding.CodePage);
         }
         DisplayRange(rangeStart, rangeEnd);
      }
      catch (ArgumentException ex) {
         Console.WriteLine(ex.Message);
      }
      finally {
         // Restore console environment.
         Console.OutputEncoding = originalOutputEncoding;
      }
   }

   public static void DisplayRange(uint start, uint end)
   {
      const uint upperRange = 0x10FFFF;
      const uint surrogateStart = 0xD800;
      const uint surrogateEnd = 0xDFFF;

      if (end <= start) {
         uint t = start;
         start = end;
         end = t;
      }

      // Check whether the start or end range is outside of last plane.
      if (start > upperRange)
         throw new ArgumentException(String.Format("0x{0:X5} is outside the upper range of Unicode code points (0x{1:X5})",
                                                   start, upperRange));                                   
      if (end > upperRange)
         throw new ArgumentException(String.Format("0x{0:X5} is outside the upper range of Unicode code points (0x{0:X5})",
                                                   end, upperRange));

      // Since we're using 21-bit code points, we can't use U+D800 to U+DFFF.
      if ((start < surrogateStart & end > surrogateStart) || (start >= surrogateStart & start <= surrogateEnd ))
         throw new ArgumentException(String.Format("0x{0:X5}-0x{1:X5} includes the surrogate pair range 0x{2:X5}-0x{3:X5}", 
                                                   start, end, surrogateStart, surrogateEnd));         
      uint last = RoundUpToMultipleOf(0x10, end);
      uint first = RoundDownToMultipleOf(0x10, start);

      uint rows = (last - first) / 0x10;

      for (uint r = 0; r < rows; ++r) {
         // Display the row header.
         Console.Write("{0:x5} ", first + 0x10 * r);

         for (uint c = 0; c < 0x10; ++c) {
            uint cur = (first + 0x10 * r + c);
            if (cur  < start) {
               Console.Write(" {0} ", Convert.ToChar(0x20));
            }
            else if (end < cur) {
               Console.Write(" {0} ", Convert.ToChar(0x20));
            }
            else {
               // the cast to int is safe, since we know that val <= upperRange.
               String chars = Char.ConvertFromUtf32( (int) cur);
               // Display a space for code points that are not valid characters.
               if (CharUnicodeInfo.GetUnicodeCategory(chars[0]) == 
                                               UnicodeCategory.OtherNotAssigned)
                  Console.Write(" {0} ", Convert.ToChar(0x20));
               // Display a space for code points in the private use area.
               else if (CharUnicodeInfo.GetUnicodeCategory(chars[0]) ==
                                              UnicodeCategory.PrivateUse)
                 Console.Write(" {0} ", Convert.ToChar(0x20));
               // Is surrogate pair a valid character?
               // Note that the console will interpret the high and low surrogate
               // as separate (and unrecognizable) characters.
               else if (chars.Length > 1 && CharUnicodeInfo.GetUnicodeCategory(chars, 0) == 
                                            UnicodeCategory.OtherNotAssigned)
                  Console.Write(" {0} ", Convert.ToChar(0x20));
               else
                  Console.Write(" {0} ", chars); 
            }

            switch (c) {
               case 3: case 11:
                  Console.Write("-");
                  break;
               case 7:
                  Console.Write("--");
                  break;
            }
         }

         Console.WriteLine();
         if (0 < r && r % 0x10 == 0)
            Console.WriteLine();
      }
   }

   private static uint RoundUpToMultipleOf(uint b, uint u)
   {
      return RoundDownToMultipleOf(b, u) + b;
   }

   private static uint RoundDownToMultipleOf(uint b, uint u)
   {
      return u - (u % b);
   }
}
// If the example is run with the command line
//       DisplayChars 0400 04FF true
// the example displays the Cyrillic character set as follows:
//       Output encoding set to UTF-16
//       00400  Ѐ  Ё  Ђ  Ѓ - Є  Ѕ  І  Ї -- Ј  Љ  Њ  Ћ - Ќ  Ѝ  Ў  Џ
//       00410  А  Б  В  Г - Д  Е  Ж  З -- И  Й  К  Л - М  Н  О  П
//       00420  Р  С  Т  У - Ф  Х  Ц  Ч -- Ш  Щ  Ъ  Ы - Ь  Э  Ю  Я
//       00430  а  б  в  г - д  е  ж  з -- и  й  к  л - м  н  о  п
//       00440  р  с  т  у - ф  х  ц  ч -- ш  щ  ъ  ы - ь  э  ю  я
//       00450  ѐ  ё  ђ  ѓ - є  ѕ  і  ї -- ј  љ  њ  ћ - ќ  ѝ  ў  џ
//       00460  Ѡ  ѡ  Ѣ  ѣ - Ѥ  ѥ  Ѧ  ѧ -- Ѩ  ѩ  Ѫ  ѫ - Ѭ  ѭ  Ѯ  ѯ
//       00470  Ѱ  ѱ  Ѳ  ѳ - Ѵ  ѵ  Ѷ  ѷ -- Ѹ  ѹ  Ѻ  ѻ - Ѽ  ѽ  Ѿ  ѿ
//       00480  Ҁ  ҁ  ҂  ҃ - ҄  ҅  ҆  ҇ -- ҈  ҉  Ҋ  ҋ - Ҍ  ҍ  Ҏ  ҏ
//       00490  Ґ  ґ  Ғ  ғ - Ҕ  ҕ  Җ  җ -- Ҙ  ҙ  Қ  қ - Ҝ  ҝ  Ҟ  ҟ
//       004a0  Ҡ  ҡ  Ң  ң - Ҥ  ҥ  Ҧ  ҧ -- Ҩ  ҩ  Ҫ  ҫ - Ҭ  ҭ  Ү  ү
//       004b0  Ұ  ұ  Ҳ  ҳ - Ҵ  ҵ  Ҷ  ҷ -- Ҹ  ҹ  Һ  һ - Ҽ  ҽ  Ҿ  ҿ
//       004c0  Ӏ  Ӂ  ӂ  Ӄ - ӄ  Ӆ  ӆ  Ӈ -- ӈ  Ӊ  ӊ  Ӌ - ӌ  Ӎ  ӎ  ӏ
//       004d0  Ӑ  ӑ  Ӓ  ӓ - Ӕ  ӕ  Ӗ  ӗ -- Ә  ә  Ӛ  ӛ - Ӝ  ӝ  Ӟ  ӟ
//       004e0  Ӡ  ӡ  Ӣ  ӣ - Ӥ  ӥ  Ӧ  ӧ -- Ө  ө  Ӫ  ӫ - Ӭ  ӭ  Ӯ  ӯ
//       004f0  Ӱ  ӱ  Ӳ  ӳ - Ӵ  ӵ  Ӷ  ӷ -- Ӹ  ӹ  Ӻ  ӻ - Ӽ  ӽ  Ӿ  ӿ

Console类包含用于读取控制台输入和写入控制台输出的以下方法︰

  • 重载ReadKey方法读取单个字符。

  • ReadLine方法读取输入一整行。

  • Write方法重载转换为格式化或非格式化字符串,值类型、 字符,数组或一组对象的实例,然后将该字符串写入控制台。

  • 并行整套WriteLine方法重载相同形式的字符串的输出Write重载,但是也添加一个行终止字符串。

Console类还包含方法和属性,以执行以下操作︰

  • 获取或设置屏幕缓冲区的大小。 BufferHeightBufferWidth属性使你可以获取或设置缓冲区的高度和宽度,分别与SetBufferSize方法使你可以在单个方法调用中设置缓冲区大小。

  • 获取或设置控制台窗口的大小。 WindowHeightWindowWidth属性使你可以获取或设置窗口的高度和宽度,分别与SetWindowSize方法使你可以在单个方法调用中设置窗口大小。

  • 获取或设置光标的大小。 CursorSize属性指定在字符单元格中的光标的高度。

  • 获取或设置控制台窗口相对于屏幕缓冲区的位置。 WindowTopWindowLeft属性使你可以获取或设置的最上面一行和显示在控制台窗口中,屏幕缓冲区的最左侧列和SetWindowPosition方法使你可以在单个方法调用中设置这些值。

  • 获取或设置光标的位置通过获取或设置CursorTopCursorLeft属性或一组通过调用光标的位置SetCursorPosition方法。

  • 移动或通过调用清除屏幕缓冲区中的数据MoveBufferAreaClear方法。

  • 获取或设置前景色和背景颜色,通过使用ForegroundColorBackgroundColor属性,或重置前景色和背景为其默认颜色通过调用ResetColor方法。

  • 通过调用播放的声音通过控制台扬声器播放提示音Beep方法。

在桌面上,.NET Framework 中Console类使用返回的编码GetConsoleCPGetConsoleOutputCP,这通常代码页编码。 有关示例代码,其区域性为英语 (美国),代码页 437 的系统上是默认情况下使用的编码。 但是,.NET 核心可能提供仅这些编码的有限的子集。 这种情况,Encoding.UTF8用作控制台的默认编码。

如果你的应用程序依赖于特定的代码页编码,就可以仍可以通过执行以下之前调用任何Console方法︰

  1. 将 System.Text.Encoding.CodePages.dll 程序集的引用添加到你的项目。

  2. 检索EncodingProvider对象CodePagesEncodingProvider.Instance属性。

  3. 传递EncodingProvider对象传递给Encoding.RegisterProvider方法使编码的可用提供程序支持的其他编码。

Console类将自动使用默认系统编码而不 UTF8,前提是你在调用任何之前注册编码提供Console输出方法。

下面的示例演示如何读取数据,并将数据写入到的标准输入和输出流。 请注意这些流,可以通过使用重定向SetInSetOut方法。

using System;

public class Example {
    public static void Main() 
    {
        Console.Write("Hello ");
        Console.WriteLine("World!");
        Console.Write("Enter your name: ");
        String name = Console.ReadLine();
        Console.Write("Good day, ");
        Console.Write(name);
        Console.WriteLine("!");
    }
}
// The example displays output similar to the following:
//       Hello World!
//       Enter your name: James
//       Good day, James!

.NET Framework
自 1.1 起可用
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用

此类型是线程安全的。

返回页首
显示: