Optionale Parameter in .NET 2.0 bis .NET 4.0 (Teil 2)
Kommentare

Data Transfer Objects
In der Regel werden sog. Data Transfer Objects (DTO) eingesetzt, um Daten über verschiedene (Remote-)Schichten zu transportieren. DTO können aber auch als Parameterobjekt für

Data Transfer Objects

In der Regel werden sog. Data Transfer Objects (DTO) eingesetzt, um Daten über verschiedene (Remote-)Schichten zu transportieren. DTO können aber auch als Parameterobjekt für einen Methodenaufruf verwendet werden. Der eigentlichen Methode wird dabei nur eine einzelne DTO-Instanz übergeben. Das DTO selbst enthält alle einzelnen Parameter für die Methode. Werte, die bei einem Methodenaufruf nicht benötigt werden, können einfach auf null gesetzt werden (Listing 3).

class MethodParameter
{
  public int? Param1 { get; set; }
  public string Param2 { get; set; }
  public double? Param3 { get; set; }
}
public static void UsingDTO(MethodParameter parameter)
{
  Console.WriteLine("Param1: {0} / Param2: {1} / Param3: {2}", 
    parameter.Param1, parameter.Param2, parameter.Param3);
}
static void Main(string[] args)
{
  UsingDTO(new MethodParameter { Param1 = 10 });
}  

Die Verwendung von DTOs ist sehr flexibel und über diesen Weg können optionale Parameter realisiert werden. Jedoch muss für jede Methode eine separate (DTO-)Klasse implementiert werden, dies führt nicht unbedingt zu einem übersichtlichen Quellcode. Darüber hinaus fördert diese Vorgehensweise nicht die Lesbarkeit und Verständlichkeit des Quellcodes, da ein Methodenaufruf nur richtig verstanden werden kann, wenn das zugehörige DTO vorliegt.

OptionalAttribute

Im Namensraum System.Runtime.InteropServices befindet sich u. a. die Klasse OptionalAttribute. Mithilfe dieses Attributs können Parameter als optional gekennzeichnet werden. Die Klasse existiert seit der ersten .NET-Version und kann, wie in Listing 4 gezeigt, verwendet werden.

public static void UsingOptionalAttr(int param1, 
                [OptionalAttribute, DefaultParameterValue(42)] int param2)
{
  Console.WriteLine("Parameter 1: {0}, Parameter 2: {1}", param1, param2);
}
static void Main(string[] args)
{
  UsingOptionalAttr(10);
  UsingOptionalAttr(20, 1);
}  

In Listing 4 definiert die Methode UsingOptionalAttr zwei Parameter. Der erste Parameter muss angegeben werden, der zweite ist optional. Im Hauptprogramm werden die möglichen Aufrufmöglichkeiten der Methode verdeutlicht. Ist kein Wert für den Parameter angegeben worden, wird der Wert, der über das Attribut DefaultParameterValue festgelegt wurde, verwendet.

Benannte und optionale Parameter in .NET 4.0

Wie in den vorherigen Abschnitten dargestellt wurde, konnten auf unterschiedlichen Wegen optionale Parameter mehr oder weniger gut simuliert werden. Die Klasse OptionalAttribute erlaubte schon effektiv die Verwendung optionaler Parameter. Das .NET Framework 4.0 erleichtert und verbessert, durch eine direkte syntaktische Unterstützung, die Verwendung optionaler Parameter in C#. Durch die direkte native Sprachunterstützung wird auch die Verwendung COM-basierter Schnittstellen erheblich vereinfacht. Listing 5 zeigt die Verwendung und Funktionsweise optionaler Parameter.

public static void OptionalParameters(int param1, int param2 = 2, 
                                          string param3 = "Empty")
{
  Console.WriteLine("Parameter 1: {0}, Parameter 2: {1}", param1, param2);
}
static void Main(string[] args)
{
  OptionalParameters(19);
  OptionalParameters(19, 6, "text");
  OptionalParameters(19, 7);
  OptionalParameters(12, param3: "text");
  OptionalParameters(12, , "text"); // NICHT MÖGLICH!
}  

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -