Pas de nouveaux types. Aucun objet explicitement créé. Fonctionne dans une application Console réelle.
public class BaseHome
{
static System.IO.TextWriter Console
{
get
{
System.Console.Write(" C\rB");
return System.Console.Out;
}
}
public static void Main()
{
Console.WriteLine("A");
// System.Console.ReadLine();
}
}
Le résultat est BAC
- sur la même ligne, pas moins !
(Ceci peut être adapté à une sortie sur plusieurs lignes, selon le post edit, avec l'utilisation de CurstorGauche/Haut ou des séquences d'échappement directes).
Explication :
La propriété statique ( Console
) est résolu à la place du type dans Console.WriteLine("A")
comme la propriété ombres le type ici ; c'est pourquoi System.Console est utilisé pour faire référence à la classe Console elle-même.
La propriété get de la console provoque un effet secondaire d'écriture dans la console - elle écrit "__C" puis utilise CR (Carriage Return) pour "revenir au début de la ligne" et écrit "B" de sorte que la ligne est "B_C", laissant le curseur après le "B".
La propriété renvoie alors le TextWriter associé à la console qui a WriteLine. Le site WriteLine de TextWriter et non la fonction statique WriteLine de Console, est alors invoquée et le caractère "A" est écrit (après "B"), de sorte que le résultat est "BAC".
Ceci utilise un comportement spécifique au contexte car c'est la console qui comprend comment déplacer le curseur (par exemple, avec " \r " ou autre positionnement du curseur).