Posts

Showing posts from April, 2017

Interesting uses of IDisposable

Everyone knows IDisposable interface, right? Right. It is simple. If you use unmanaged resources, you should implement IDisposable and release them when your object is being disposed. Simple. But IDisposable is a very special interface. It even has its own keyword: using . Example use: Code above is equal to: Constructor is called first, then we are doing something inside, and at the end Dispose method is called to finalize work. So maybe we could use IDisposable not only to clean up unmanaged resources, but as a shorter form of try / finally to put our code in specific context. That sounds like a great idea and obviously it is not mine. This idea was used in few places in .NET libraries. Here are 4 examples of IDisposable: First example. This is code from ASP.NET MVC to generate HTML form using Razor: Output of this code will be close to: What happens? Html.BeginForm() is a function that writes "<form>" to response and returns MvcForm type object. MvcF