Mono源代码学习笔记:Console类(一)
?
Microsoft 实现的 Console 类只需要考虑 Windows 操作系统的控制台就行了,但是 Mono 的 Console 类就必须考虑跨平台了,要能够工作在 Windows 和 Unix 操作系统中。所以是比较复杂的。
准备在自己的工作目录下编译出 Console.dll 程序集为了研究 Console 类的源代码,找出和 Console 类密切相关的源代码,我准备从 Console.cs 出发在自己的工作目录下编译出一个 Console.dll 程序集。我们来看看 Console 类的源代码位于 Mono 体系的什么位置:
各种类型之间的关系图
在上图中,最核心的类型如下所示:
Console: public static class,调用下面的 ConsoleDriver 类的静态方法和静态属性来干活。ConsoleDriver: internal class,内部持有一个类型为 IConsoleDriver 接口的 internal 静态字段。IConsoleDriver: internal interface,以下三个类均实现 IConsoleDriver 接口。NullConsoleDriver: internal class,只实现最基本的控制台输入/输出功能,用于哑终端等情况。TermInfoDriver: internal class,用于 Unix 操作系统的各种终端。WindowsConsoleDriver: internal class,用于 Windows 操作系统的控制台。
可以点击下载 Console.7z。