C# Don';我不明白IDisposable的用法
有人能给我解释一下下面的C代码吗 我确实知道IDisposable的正常用法。但是我不理解下面的代码。新LogLog.LogReceivedAdapter(configurationMessages)的实例化看起来与关键字using中的代码块无关。语句InternalConfigure(存储库、configFile)最终如何更新变量configurationMessages 顺便说一句,这段代码是从log4net XmlConfigurator.cs#508中获取的C# Don';我不明白IDisposable的用法,c#,log4net,idisposable,C#,Log4net,Idisposable,有人能给我解释一下下面的C代码吗 我确实知道IDisposable的正常用法。但是我不理解下面的代码。新LogLog.LogReceivedAdapter(configurationMessages)的实例化看起来与关键字using中的代码块无关。语句InternalConfigure(存储库、configFile)最终如何更新变量configurationMessages 顺便说一句,这段代码是从log4net XmlConfigurator.cs#508中获取的 我不知道确切的代码,但它可能
我不知道确切的代码,但它可能如下所示:
- LogLog在构建时将
注册到某个静态类(我们称之为configurationMessages
)中李>Log
- InternalConfigure使用该静态类(实际上已填充configurationMessages)
- LogLog类的Dispose()方法从
类中删除适配器Log
您介绍的部分需要大量猜测,但我相信,情况就是这样。我相信
logreceivedapter
的构造函数就是一个答案
public LogReceivedAdapter(IList items)
{
this.items = items;
handler = new LogReceivedEventHandler(LogLog_LogReceived);
LogReceived += handler;
}
正如您所看到的,它在背后发挥了一些魔力,因此,即使代码中没有直接引用新创建的实例,它也可能有某种意义:)C#以一种特定的方式处理实现IDisposable的类:当代码到达“using”的结束括号时,它调用Dispose()创建对象的块。
查看LogLog.LogReceivedAdapter的Dispose()方法。代码确保调用此方法。LogReceivedAdapter C'tor中有什么?InternalConfigure()的实现是什么?奇怪的代码,即使它能工作,如果可能的话你也应该重构它。LogReceivedAdapter的实例订阅了一个名为LogReceive的静态事件。这意味着using语句中出现的任何日志消息(错误、信息等)都将输出到configurationMessages变量。一旦到达using语句的右大括号,它就会从LogReceive事件中取消订阅实例。我终于知道LogReceived是一个静态事件,它是在其父类日志中定义的。谢谢。是的,史布克,你完全正确。当migajek粘贴了的构造函数的具体操作时,我终于得到了它所代表的含义。谢谢
public LogReceivedAdapter(IList items)
{
this.items = items;
handler = new LogReceivedEventHandler(LogLog_LogReceived);
LogReceived += handler;
}