以下代码:
static void Main(string[] args)
{
TraceSource ts = new TraceSource("MyApplication");
ts.Switch = new SourceSwitch("MySwitch");
ts.Switch.Level = SourceLevels.All;
ts.Listeners.Add(new TextWriterTraceListener(Console.Out));
ts.TraceInformation("Hello World");
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
生成以下输出:
MyApplication信息:0:Hello World
跟踪输出开头的"MyApplication Information:0:"部分来自TraceSource类本身.
但是,我需要在行的开头有一个时间戳,我想将"信息"更改为"信息".
有没有办法在跟踪输出中获得更多自由,这样我可以将其配置为:
13:03:00 - MyApplication Info:Hello World
我尝试了几个小时,但没有成功.无论我做什么,在输出行的开头,始终有这个常量预定义的"MyApplication Information:0:Hello World"输出.
MSDN文档也没有透露任何有用的信息.
我的问题如下.我为一个显然不起作用的家庭项目做了代码设计.也许你可以帮我弄清楚"代码味道"来自哪里.
好吧,让我们开始:我已经定义了一些类来包装不同类型的存档类型:
public abstract class Archive { }
public class ZipArchive : Archive { }
public class TarArchive : Archive { }
Run Code Online (Sandbox Code Playgroud)
为了处理这些档案,我定义了Manager类.一个定义所需行为的抽象概念,
public abstract class ArchiveManager<T> where T : Archive
{
public abstract void OpenArchive(T archive);
}
Run Code Online (Sandbox Code Playgroud)
具体实现特定的behaiour的具体的:
public class ZipArchiveManager : ArchiveManager<ZipArchive>
{
public override void OpenArchive(ZipArchive archive) { /* .. */ }
}
public class TarArchiveManager : ArchiveManager<TarArchive>
{
public override void OpenArchive(TarArchive archive) { /* .. */ }
}
Run Code Online (Sandbox Code Playgroud)
现在发生的事情是,在编译期间,我不知道我将处理哪种档案,所以我尝试了以下方法:
class Program
{
static void Main(string[] …Run Code Online (Sandbox Code Playgroud)