最近,我在接受采访时遇到了以下问题.最初我认为这个问题是错的,但面试官提到有一个解决方案.鉴于此类:
public class BaseHome
{
public static void Main()
{
Console.WriteLine("A");
}
}
Run Code Online (Sandbox Code Playgroud)
将以下内容写入控制台:
B
A
C
Run Code Online (Sandbox Code Playgroud)
规则:
如何才能做到这一点?
ken*_*n2k 49
假设你的意思是BAC三行(加上main
方法名称没有拼写错误):
namespace ConsoleApplication1
{
public class BaseHome
{
static BaseHome()
{
Console.WriteLine("B");
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit);
}
public static void Main()
{
Console.WriteLine("A");
}
private static void OnProcessExit(object sender, EventArgs e)
{
Console.WriteLine("C");
Console.Read();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Den*_*s_E 25
哈哈哈,我明白了.创建一个静态属性!
public class BaseHome
{
public static void Main()
{
Console.WriteLine("A");
}
public static BaseHome Console
{
get{ return new BaseHome(); }
}
public void WriteLine(string s) {
System.Console.WriteLine("BCA"); //Or multiple lines if you like
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:或者,呃,只是一个字段
public class BaseHome
{
static BaseHome Console = new BaseHome();
public static void Main()
{
Console.WriteLine("A");
}
public void WriteLine(string s) {
System.Console.WriteLine("BCA"); //Or multiple lines if you like
}
}
Run Code Online (Sandbox Code Playgroud)
use*_*740 17
没有新的类型.没有显式创建对象.适用于真正的控制台应用程序.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
结果是BAC
- 在同一条线上不下!
(根据后期编辑,可以使用CurstorLeft/Top或直接转义序列来调整多行输出.)
说明:
静态属性(Console
)被解析而不是类型in Console.WriteLine("A")
属性阴影这里的类型; 这就是System.Console用于引用Console类本身的原因.
Console get-property导致写入控制台的副作用 - 它写入"__C"然后使用CR(回车)"返回到行开始"并写入"B",因此该行为"B_C",离开"B"后的光标.
然后,该属性返回与具有WriteLine 的控制台关联的TextWriter.该TextWriter的的的WriteLine,不是控制台的静态的WriteLine,然后调用和字符"A"被写入(在"B"),这样的结果是"BAC".
这利用了特定于上下文的行为,因为它是理解如何移动光标的控制台(例如,使用"\ r"或其他光标定位).
Mik*_*ray 13
只需要一个静态构造函数:
public class BaseHome
{
static BaseHome()
{
Console.WriteLine("B\nA\nC");
Console.SetOut(System.IO.TextWriter.Null);
}
public static void Main()
{
Console.WriteLine("A");
}
}
Run Code Online (Sandbox Code Playgroud)
而不是重定向输出流,其他选项包括调用Environment.Exit
,抛出未处理的异常,或者只是永远旋转.目前还不清楚该程序是否需要正常终止(或根本不需要).
struct ConsoleStruct
{
private string _text;
public ConsoleStruct(string text)
{
_text = text;
}
public void WriteLine(string txt)
{
Console.WriteLine(_text);
}
}
class Program
{
private static ConsoleStruct Console = new ConsoleStruct("B A C");
static void Main(string[] args)
{
Console.WriteLine("A");
}
}
Run Code Online (Sandbox Code Playgroud)