Feedback

C# - ISupportInitializeSession

Veröffentlicht von am 6/20/2017
(0 Bewertungen)
Habt ihr euch schon mal in der Situation wiedergefunden, dass ihr bestimmten Code mit einer Begin- und End-Methode umgeben musstet.

var trackBar = new System.Windows.Forms.TrackBar();
trackBar.BeginInit();
trackBar.Minimum = 20;
trackBar.Maximum = 50;
trackBar.Value = 30;
trackBar.EndInit();


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.

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();
}


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

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();
}
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();
    }
}
Abgelegt unter using, IDisposable, ISupportInitialize.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!