有人会为我解释下面的C#代码吗?
我确实知道IDisposable 的正常用法。但我不明白以下代码。 new LogLog.LogReceivedAdapter(configurationMessages)的实例化看起来与关键字使用中的代码块无关。语句 InternalConfigure(repository,configFile)最终如何更新变量 configurationMessages ?
顺便说一下,代码片段是从log4net中获取的XmlConfigurator.cs#508static public ICollection Configure(ILoggerRepository repository, FileInfo configFile)
{
ArrayList configurationMessages = new ArrayList();
using (new LogLog.LogReceivedAdapter(configurationMessages))
{
InternalConfigure(repository, configFile);
}
repository.ConfigurationMessages = configurationMessages;
return configurationMessages;
}
答案 0 :(得分:1)
我不知道确切的代码,但可能如下所示:
configurationMessages
(我们称之为Log
); Log
类中删除适配器。你提出的部分需要大量猜测,但我相信,情况确实如此。
答案 1 :(得分:1)
我相信LogReceivedAdapter
的构造函数是一个答案。
public LogReceivedAdapter(IList items)
{
this.items = items;
handler = new LogReceivedEventHandler(LogLog_LogReceived);
LogReceived += handler;
}
正如你所看到的,它背后有一些魔力 - 即使你的代码中没有直接引用新创建的实例 - 它可能有一定意义:)
答案 2 :(得分:0)
C#以一种特定的方式处理实现IDisposable的类:它在代码到达创建对象的“using”块的右括号时调用Dispose()。 查看LogLog.LogReceivedAdapter的Dispose()方法。代码确保调用此方法。