C# Don';我不明白IDisposable的用法

C# Don';我不明白IDisposable的用法,c#,log4net,idisposable,C#,Log4net,Idisposable,有人能给我解释一下下面的C代码吗 我确实知道IDisposable的正常用法。但是我不理解下面的代码。新LogLog.LogReceivedAdapter(configurationMessages)的实例化看起来与关键字using中的代码块无关。语句InternalConfigure(存储库、configFile)最终如何更新变量configurationMessages 顺便说一句,这段代码是从log4net XmlConfigurator.cs#508中获取的 我不知道确切的代码,但它可能

有人能给我解释一下下面的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;
}