Похоже, что в большинстве случаев компилятор C # может автоматически вызывать Dispose()
. Как и большинство случаев с использованием шаблона , выглядит так:
public void SomeMethod()
{
...
using (var foo = new Foo())
{
...
}
// Foo isn't use after here (obviously).
...
}
Поскольку foo
не используется (это очень простое обнаружение) и поскольку оно не предоставляется в качестве аргумента для другого метода (это предположение, которое применяется ко многим случаям использования и может быть расширено), компилятор может автоматически и немедленно звоните Dispose()
без необходимости делать это разработчику.
Это означает, что в большинстве случаев using
довольно бесполезен, если компилятор выполняет какую-то умную работу. IDisposable
кажется низким уровнем мне достаточно, чтобы компилятор учел это.
Теперь, почему это не сделано? Разве это не улучшит производительность (если разработчики ... грязные ).