Using Statement
==================================================================
==================================================================
using (Font font1 = new Font("Arial", 10.0f)) { byte charset = font1.GdiCharSet; }
=>File and Font are examples of managed types that access unmanaged
resources (in this case file handles and device contexts).
There are many other kinds of unmanaged resources and class
library types that encapsulate them. All such types must implement
the IDisposable interface.
=>As a rule, when you use an IDisposable object, you should declare and
instantiate it in a using statement. The using statement calls the
Dispose method on the object in the correct way, and (when you use it as
shown earlier) it also causes the object itself to go out of scope as
soon as Dispose is called. Within the using block, the object is
read-only and cannot be modified or reassigned.
=>The using statement ensures that Dispose is called even if an exception
occurs while you are calling methods on the object. You can achieve the
same result by putting the object inside a try block and then calling
Dispose in a finally block; in fact, this is how the using statement is
translated by the compiler. The code example earlier expands to the
following code at compile time (note the extra curly braces to create
the limited scope for the object)
{ Font font1 = new Font("Arial", 10.0f); try { byte charset = font1.GdiCharSet; } finally { if (font1 != null) ((IDisposable)font1).Dispose(); }}