Feedback

ISupportInitializeSession

Sprache: C#

Habt ihr euch schon mal in der Situation wiedergefunden, dass ihr bestimmten Code mit einer Begin- und End-Methode umgeben musstet. [code]var trackBar = new System.Windows.Forms.TrackBar(); trackBar.BeginInit(); trackBar.Minimum = 20; trackBar.Maximum = 50; trackBar.Value = 30; trackBar.EndInit();[/code] Sobald hier eine Exception geworfen wird, wird es umständlich. Wenn nun trotzdem die End-Methode aufgerufen werden soll, dann benötigt man dafür das try-finally-Pattern. [code]var trackBar = new System.Windows.Forms.TrackBar(); try { trackBar = new trackBar.BeginInit(); trackBar.Minimum = 20; trackBar.Maximum = 50; trackBar.Value = 30; throw new System.Exception(); } finally { trackBar.EndInit(); }[/code] C# bietet in dieser Situation mit using und der System.IDisposable-Schnittstelle etwas syntactic sugar an. Mit Hilfe der Klasse InitSession aus dem Snippet verkürzt sich obiger Code zu [code]var trackBar = new System.Windows.Forms.TrackBar(); using (var session = new InitSession(trackBar)) { trackBar.Minimum = 20; trackBar.Maximum = 50; trackBar.Value = 30; throw new System.Exception(); }[/code]
public class InitSession : System.IDisposable
{
    public InitSession(System.ComponentModel.ISupportInitialize component)
    {
        this.component = component;
        component.BeginInit();
    }

    private readonly System.ComponentModel.ISupportInitialize component;

    public void Dispose()
    {
        component.EndInit();
    }
}
public class InitSession : System.IDisposable
{
    public InitSession(System.ComponentModel.ISupportInitialize component)
    {
        this.component = component;
        component.BeginInit();
    }

    private readonly System.ComponentModel.ISupportInitialize component;

    public void Dispose()
    {
        component.EndInit();
    }
}