Entwickler-Ecke

C# - Die Sprache - Methode richtig gestalten - Übergabeparameter


Felix2000 - Di 16.08.11 14:07
Titel: Methode richtig gestalten - Übergabeparameter
Hi Folks !

Ich habe eine Frage an euch. Wenn ich in C Sharp einer Methode ein Array, ein Array welches evtl. mehrere Objekte beinhaltet oder ein sonstiges Objekt beim Aufruf als Parameter übergeben will, wie genau gestalte ich dann die Methode

a)beim Aufruf dieser selbst (also wie genau sieht das Aufruf einer solchen Methode inkl. der Parameterübergabe aus)
b)bei der Deklaration dieser Methode (wie genau muss die Methode entwickelt werden)

Danke für die Hilfestellung !

Greetz
Felix


Th69 - Di 16.08.11 19:08

Hallo Felix,

so allgemein kann man dies nicht beantworten.
Es gibt verschiedene Möglichkeiten ein Array als Parameter zu deklarieren (mit "int" als Beispiel):

C#-Quelltext
1:
2:
3:
4:
5:
6:
void Iterate1(int[] array);
void Iterate2(params int[] array);
void Iterate3(IList array);
void Iterate4(IList<int> array);
void Iterate5(IEnumerable array);
void Iterate6(IEnumerable<int> array);

Generell sollten die Parameter so allgemeingültig wie möglich sein, so daß man die Methode dann mit verschiedenen Array-Typen aufrufen kann. Daher sollten bevorzugt die Interfaces eingesetzt werden - am besten dann natürlich die generischen, d.h. mit einem konkreten Typ bzw. einer Basisklasse oder am besten wiederum einem Interface, d.h.:

C#-Quelltext
1:
void Iterate(IEnumerable<IBaseType> array);                    


Felix2000 - Mi 17.08.11 09:38

Hi Folks !

user profile iconTh69 hat folgendes geschrieben:
Generell sollten die Parameter so allgemeingültig wie möglich sein, so daß man die Methode dann mit verschiedenen Array-Typen aufrufen kann.


Ok das macht definitiv Sinn, viele der bekannten Design-Patterns basieren ja auch auf dieser Idee.

user profile iconTh69 hat folgendes geschrieben:
Daher sollten bevorzugt die Interfaces eingesetzt werden - am besten dann natürlich die generischen, d.h. mit einem konkreten Typ bzw. einer Basisklasse oder am besten wiederum einem Interface, d.h.:

C#-Quelltext
1:
void Iterate(IEnumerable<IBaseType> array);                    


Also wenn ich ehrlich bin, dann habe ich das noch nicht so richtig verstanden. Was genau sind generischen Interfaces, ich habe das ehrlich gesagt noch nie gehört!?

Greetz
Felix

Moderiert von user profile iconTh69: Quotes richtig formatiert


Th69 - Mi 17.08.11 09:58

Hallo Felix,

s. z.B. Generische Schnittstellen [http://msdn.microsoft.com/de-de/library/bb762928.aspx] sowie Generische Schnittstellen (C#-Programmierhandbuch) [http://msdn.microsoft.com/de-de/library/kwtft8ak%28v=VS.100%29.aspx]

Kurz gesagt: Genauso wie Klassen können auch Schnittstellen (Interfaces) generisch sein, d.h. mit einem (oder mehreren) Typparameter(n), so daß die Methodenparameter sowie Rückgabewerte gezielt diesen Typ verwenden (anstatt immer nur object, so daß wieder explizit gecastet werden müßte).