Maison base de données tutoriel mysql Mono源代码学习笔记:Console类(一)

Mono源代码学习笔记:Console类(一)

Jun 07, 2016 pm 05:38 PM
console mono 学习 源代码 笔记

前言 我们知道,Mono 是 .NET Framework 跨平台的开源实现。Mono 的源代码就是金矿,等待我们去挖掘。 目前 Mono 的最新版本是 Mono 2.8.2,可以到 下载 mono-2.8.2.tar.bz2,文件大小是30MB。可以参阅在 Ubuntu 10.10 操作系统安装 Mono 2.8.2一文。 现在,

前言

我们知道,Mono 是 .NET Framework 跨平台的开源实现。Mono 的源代码就是金矿,等待我们去挖掘。

目前 Mono 的最新版本是 Mono 2.8.2,可以到 下载 mono-2.8.2.tar.bz2,文件大小是30MB。可以参阅“在 Ubuntu 10.10 操作系统安装 Mono 2.8.2”一文。

现在,让我们来看看 Mono 是如何实现 .NET Framework Base Class Library 中的 System.Console 类的。Console 类在 CUI 应用程序中有着十分重要的作用。而且,从 .NET Framework 2.0 开始,Console 类除了实现基本的控制台输入/输出功能以外,还实现了诸如更改前景色和背景色等高级功能。下图就是一个例子:

 

Microsoft 实现的 Console 类只需要考虑 Windows 操作系统的控制台就行了,但是 Mono 的 Console 类就必须考虑跨平台了,要能够工作在 Windows 和 Unix 操作系统中。所以是比较复杂的。

准备在自己的工作目录下编译出 Console.dll 程序集

为了研究 Console 类的源代码,找出和 Console 类密切相关的源代码,,我准备从 Console.cs 出发在自己的工作目录下编译出一个 Console.dll 程序集。我们来看看 Console 类的源代码位于 Mono 体系的什么位置:

ben@ben-1520:~$ cd src/mono-2.8.2 ben@ben-1520:~/src/mono-2.8.2$ find . -name Console.cs ./mcs/class/corlib/System/Console.cs ben@ben-1520:~/src/mono-2.8.2$

哦,因为 Console 类定义于 .NET Framework 最核心的 mscorlib.dll 程序集,并且位于 System 命名空间。所以上面的命令就显示这样的结果了。

我们现在准备一个工作目录:

ben@ben-1520:~$ cd ~/work ben@ben-1520:~/work$ mkdir Console ben@ben-1520:~/work$ cd Console ben@ben-1520:~/work/Console$

先把上述 Console.cs 从 Mono 的源代码目录拷贝到工作目录中,然后使用 C# 编译器进行编译,根据出错信息来决定还要拷贝哪些文件。最终,发现需要 Mono 源代码 mcs/build/common、mcs/class/corlib/System 和 mcs/class/corlib/System.IO 目录下的 23 个 C# 源程序文件,在上面三个目录分别是 2 个、18 个和 3 个。我编写了一个如下内容的 mksrc.sh 脚本,用于将 Mono 2.8.2 的源代码与 Console 类相关的源文件复制到工作目录中:

01: cd ~/work/Console 02: rm -rf mcs 03: mkdir mcs 04: mkdir mcs/build 05: mkdir mcs/build/common 06: mkdir mcs/class 07: mkdir mcs/class/corlib 08: mkdir mcs/class/corlib/System 09: mkdir mcs/class/corlib/System.IO 10: cd ~/src/mono-2.8.2/mcs/build/common 11: cp Locale.cs MonoTODOAttribute.cs ~/work/Console/mcs/build/common 12: cd ~/src/mono-2.8.2/mcs/class/corlib/System.IO 13: cp Stream.cs UnexceptionalStream*er.cs ~/work/Console/mcs/class/corlib/System.IO 14: cd ~/src/mono-2.8.2/mcs/class/corlib/System 15: cp Buffer.cs Control*.cs CStream*.cs *Term*.cs *Console*.cs ~/work/Console/mcs/class/corlib/System 16: cd ~/work/Console/mcs/class/corlib/System 17: rm ConsoleColor.cs ConsoleKey.cs ConsoleModifiers.cs ConsoleSpecialKey.cs 18: cd ~/work/Console 从 Stream.cs 中分离出 NullStream 类的源代码

在 Mono 的源代码的 Stream.cs 文件中,包含以下三个类:

因为我们需要用到 NullStream 类,所以将工作目录中 mcs/class/corlib/System.IO/ 目录下的 Stream.cs 改名为 NullStream.cs,然后在该文件中删除另外两个类的源代码,只保留 NullStream 类的源代码。

虽然 Mono 是一项伟大的开源工程,大师们写的代码也非常精彩。但是在这里还是有点疏忽了。如果 Mono 的源代码的 Stream.cs 文件中只包含 Stream 类,而把 NullStream 类的源代码放在 NullStream.cs 文件中,把 SynchronizedStream 类的源代码放在 SynchronziedStream.cs 文件中。我们也就可以直接使用 NullStream.cs 文件了,不用象现在一样又是改名,又是删除代码。

编写辅助代码

现在让我们编写一些简单的辅助代码,以便能够编译生成 Console.dll 程序集文件。

ben@ben-1520:~/work/Console$ mkdir Skyiv ben@ben-1520:~/work/Console$ cd Skyiv ben@ben-1520:~/work/Console/Skyiv$ gedit AssemblyInfo.cs Environment.cs ExtensionMethods.cs MonoIO.cs Stub.cs ben@ben-1520:~/work/Console/Skyiv$

下面就是 AssemblyInfo.cs,仅仅是简单地使用 CLSCompliantAttribute 标记程序集,指示该程序集符合公共语言规范。

1: using System; 2: 3: [assembly:CLSCompliant(true)]

下面就是 Environment.cs,主要是因为在 Console.cs、ConsoleDrivers.cs 这两个源程序中使用了 Environment 静态类的 IsRunningOnWindows 静态属性,而这个属性是 internal 的。所以我们必须自己提供一个,不然程序无法通过编译。我们还必须提供在其他源程序中有使用的 NewLine 属性以及 Exit 和 GetEnvironmentVariable 方法。这三个成员原来是 public 的,但是我们自己用的话,使用 internal 来修饰是没有问题的。注意,IsRunningOnWindows 属性指示是否运行在 Windows 操作系统中,这在 Microsoft 的 .NET Framework 中是没有的,因为 Microsoft 的实现总是运行在 Windows 操作系统中。Mono 为了跨平台才需要这个属性。

01: namespace System 02: { 03: static class Environment 04: { 05: internal static bool IsRunningOnWindows { get { return false; } } ; } } 07: internal static void Exit(int code) { } 08: internal static string GetEnvironmentVariable(string value) { return value; } 09: } 10: }
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment supprimer les notes Xiaohongshu Comment supprimer les notes Xiaohongshu Mar 21, 2024 pm 08:12 PM

Comment supprimer les notes de Xiaohongshu ? Les notes peuvent être modifiées dans l'application Xiaohongshu. La plupart des utilisateurs ne savent pas comment supprimer les notes de Xiaohongshu. Ensuite, l'éditeur propose aux utilisateurs des images et des textes expliquant comment supprimer les notes de Xiaohongshu. un regard ensemble ! Tutoriel d'utilisation de Xiaohongshu Comment supprimer les notes de Xiaohongshu 1. Ouvrez d'abord l'application Xiaohongshu et entrez dans la page principale, sélectionnez [Moi] dans le coin inférieur droit pour accéder à la zone spéciale 2. Ensuite, dans la zone Ma, cliquez sur la page de note comme suit : indiqué ci-dessous, sélectionnez la note que vous souhaitez supprimer ; 3. Accédez à la page de notes, cliquez sur [trois points] dans le coin supérieur droit ; 4. Enfin, la barre de fonctions s'agrandira en bas, cliquez sur [Supprimer] pour terminer.

Tutoriel sur la mise à jour de la version curl sous Linux ! Tutoriel sur la mise à jour de la version curl sous Linux ! Mar 07, 2024 am 08:30 AM

Pour mettre à jour la version curl sous Linux, vous pouvez suivre les étapes ci-dessous : Vérifiez la version actuelle de curl : Tout d'abord, vous devez déterminer la version de curl installée dans le système actuel. Ouvrez un terminal et exécutez la commande suivante : curl --version Cette commande affichera les informations sur la version actuelle de curl. Confirmer la version curl disponible : Avant de mettre à jour curl, vous devez confirmer la dernière version disponible. Vous pouvez visiter le site officiel de curl (curl.haxx.se) ou des sources de logiciels associées pour trouver la dernière version de curl. Téléchargez le code source de curl : à l'aide de curl ou d'un navigateur, téléchargez le fichier de code source pour la version curl de votre choix (généralement .tar.gz ou .tar.bz2).

Que dois-je faire si les notes que j'ai publiées sur Xiaohongshu sont manquantes ? Quelle est la raison pour laquelle les notes qu'il vient d'envoyer sont introuvables ? Que dois-je faire si les notes que j'ai publiées sur Xiaohongshu sont manquantes ? Quelle est la raison pour laquelle les notes qu'il vient d'envoyer sont introuvables ? Mar 21, 2024 pm 09:30 PM

En tant qu'utilisateur de Xiaohongshu, nous avons tous été confrontés à la situation où les notes publiées ont soudainement disparu, ce qui est sans aucun doute déroutant et inquiétant. Dans ce cas, que devons-nous faire ? Cet article se concentrera sur le thème « Que faire si les notes publiées par Xiaohongshu sont manquantes » et vous donnera une réponse détaillée. 1. Que dois-je faire si les notes publiées par Xiaohongshu manquent ? Premièrement, ne paniquez pas. Si vous constatez que vos notes manquent, il est essentiel de rester calme et de ne pas paniquer. Cela peut être dû à une défaillance du système de la plateforme ou à des erreurs opérationnelles. Vérifier les enregistrements de version est facile. Ouvrez simplement l'application Xiaohongshu et cliquez sur « Moi » → « Publier » → « Toutes les publications » pour afficher vos propres enregistrements de publication. Ici, vous pouvez facilement trouver des notes publiées précédemment. 3.Repost. Si trouvé

Précommandes ouvertes pour la nouvelle actualisation de la Nintendo Switch Lite Précommandes ouvertes pour la nouvelle actualisation de la Nintendo Switch Lite Jun 29, 2024 am 06:49 AM

Nintendo a ouvert les précommandes pour la dernière version du Switch Lite (curr. 189,99 $ sur Amazon). Cependant, l’appareil n’est pas encore disponible à la commande dans le monde entier. Pour récapituler, la société a présenté la Switch Lite Hyrule Edition il y a près de deux semaines.

Comment ajouter des liens de produits dans les notes dans Xiaohongshu Tutoriel sur l'ajout de liens de produits dans les notes dans Xiaohongshu Comment ajouter des liens de produits dans les notes dans Xiaohongshu Tutoriel sur l'ajout de liens de produits dans les notes dans Xiaohongshu Mar 12, 2024 am 10:40 AM

Comment ajouter des liens de produits dans les notes dans Xiaohongshu ? Dans l'application Xiaohongshu, les utilisateurs peuvent non seulement parcourir divers contenus mais également faire des achats, il y a donc beaucoup de contenu sur les recommandations d'achat et le bon partage de produits dans cette application si vous êtes un expert. sur cette application, vous pouvez également partager des expériences d'achat, trouver des commerçants pour coopérer, ajouter des liens dans des notes, etc. De nombreuses personnes sont prêtes à utiliser cette application pour faire du shopping, car elle est non seulement pratique, mais elle a également de nombreux experts qui en feront recommandations. Vous pouvez parcourir du contenu intéressant et voir s'il existe des produits vestimentaires qui vous conviennent. Voyons comment ajouter des liens de produits aux notes ! Comment ajouter des liens de produits aux notes de Xiaohongshu Ouvrez l'application sur le bureau de votre téléphone mobile. Cliquez sur la page d'accueil de l'application

Révéler l'attrait du langage C : découvrir le potentiel des programmeurs Révéler l'attrait du langage C : découvrir le potentiel des programmeurs Feb 24, 2024 pm 11:21 PM

Le charme de l'apprentissage du langage C : libérer le potentiel des programmeurs Avec le développement continu de la technologie, la programmation informatique est devenue un domaine qui a beaucoup attiré l'attention. Parmi les nombreux langages de programmation, le langage C a toujours été apprécié des programmeurs. Sa simplicité, son efficacité et sa large application font de l’apprentissage du langage C la première étape pour de nombreuses personnes souhaitant entrer dans le domaine de la programmation. Cet article discutera du charme de l’apprentissage du langage C et de la manière de libérer le potentiel des programmeurs en apprenant le langage C. Tout d’abord, le charme de l’apprentissage du langage C réside dans sa simplicité. Comparé à d'autres langages de programmation, le langage C

Nintendo annonce une nouvelle actualisation de Switch Lite avant la sortie de Switch 2 Nintendo annonce une nouvelle actualisation de Switch Lite avant la sortie de Switch 2 Jun 20, 2024 am 09:41 AM

Nintendo a présenté hier de nombreux jeux lors de son dernier événement Nintendo Direct, dont nous avons fourni un aperçu séparément. De plus, la société a également annoncé une nouvelle version du Switch Lite (194,93 $ sur Amazon), peut-être

Premiers pas avec Pygame : didacticiel complet d'installation et de configuration Premiers pas avec Pygame : didacticiel complet d'installation et de configuration Feb 19, 2024 pm 10:10 PM

Apprenez Pygame à partir de zéro : didacticiel complet d'installation et de configuration, exemples de code spécifiques requis Introduction : Pygame est une bibliothèque de développement de jeux open source développée à l'aide du langage de programmation Python. Elle fournit une multitude de fonctions et d'outils, permettant aux développeurs de créer facilement une variété de types. de jeu. Cet article vous aidera à apprendre Pygame à partir de zéro et fournira un didacticiel complet d'installation et de configuration, ainsi que des exemples de code spécifiques pour vous permettre de démarrer rapidement. Première partie : Installer Python et Pygame Tout d'abord, assurez-vous d'avoir

See all articles