我将控制台更改为自定义TextWriterclass(TextBoxStreamWriter)。我想检查是否使用我的编写器实例设置了Console.Out(因为其他类可能已经更改了它等)。
样品:
// "TextBoxStreamWriter : TextWriter" is a custom class that writes to a textbox...
TextBoxStreamWriter myWriter = new TextBoxStreamWriter(someTextBoxInstance);
Console.SetOut(myWriter);
bool check = Console.Out == myWriter;
// But check is false! I need to know if .Out was set from my custom class or not.
答案 0 :(得分:1)
Console.SetOut
将myWriter
包裹在另一个TextWriter
中,通过将所有调用包装在lock
中来使其保持线程安全。这就是您在检查Console.Out == myWriter;
你需要一些反射代码来检查它,因为包装TextWriter是内部的。它被命名为SyncTextWriter
。
您可以参考source here了解更多信息。
答案 1 :(得分:0)
这是预期的,请查看Console.SetOut
源代码:http://referencesource.microsoft.com/#mscorlib/system/console.cs,2d6029756ecc3409。它将您的文本编写器包装在SyncTextWriter
。
我认为你必须使用反射来查看包装类型。