Variadische Methoden in C# 👍 👎

Variadische Funktionen sind Funktionen, die eine unbestimmte Anzahl von Argumenten (→ Arität) entgegennehmen können. Das passende Stichwort an dieser Stelle für PHP-Entwickler ist hauptsächlich func_get_args. Selbstverständlich bietet beispielsweise auch Java eine entsprechende Möglichkeit. Wie ihr sicher bereits befürchtet habt, lege ich den Fokus im weiteren Verlauf jedoch auf C#. Smiley: grinning

Als Beispiel soll uns eine Methode dienen, welche uns die Summe einer beliebigen Anzahl an Zahlen liefert. Zu Vergleichszwecken erinnern wir uns zuerst einmal daran, wie dieses Problem "normal" gelöst werden kann. Die Lösung ist selbstverständlich, ein Feld zu übergeben:
Nicht-variadische Funktion zur Problemlösung
01020304050607
  // Methode definierenpublic int GetSum(int[] list) {    return list.Sum();}
// Methode verwendenint sum = GetSum(new int[] { 1, 2, 3 });
Durch eine minimale Anpassung – nämlich indem wir das params-Schlüsselwort vor dem Parameter ergänzen – wird daraus eine variadische Funktion unter Beibehaltung der bisherigen Funktionalität:
Variadische Funktion zur Problemlösung
010203040506070809
  // Methode definierenpublic int GetSum(params int[] list) {    return list.Sum();}
// Methode verwendenint sum = GetSum(1, 2, 3); // – oder, ebenfalls möglich -int sum = GetSum(new int[] { 1, 2, 3 });
Wie leicht zu sehen ist, handelt es sich soweit letztlich um eine syntaktische Variante, welche nicht unbedingt notwendig ist. Bei Methoden, die sehr häufig z. B. zwei oder drei Argumente erwarten, prinzipiell jedoch auch mehr denkbar wären, erscheint mir eine solche Möglichkeit jedoch durchaus vernünftig. Das .NET-Framework setzt u. a. bei den Methoden String.Format(…) und String.Join(…) auf dieses Vorgehen.

Zuletzt gilt es aber noch auf folgende Besonderheiten hinzuweisen:
  • params-Parameter sind generell optional (d. h. GetSum() wäre möglich)
  • params-Parameter können vor sich fest definierte Parameter besitzen, nicht jedoch danach
  • params-Parameter dürfen pro Methode lediglich einmal auftreten


Projektverweise

Kategorien / Archiv  |  Übersicht RSS-Feed

Schlagworte

Suche