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