Autor Beitrag
Felix2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124



BeitragVerfasst: Di 16.08.11 14:07 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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):
ausblenden 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.:
ausblenden C#-Quelltext
1:
void Iterate(IEnumerable<IBaseType> array);					
Felix2000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124



BeitragVerfasst: 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.:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 17.08.11 09:58 
Hallo Felix,

s. z.B. Generische Schnittstellen sowie Generische Schnittstellen (C#-Programmierhandbuch)

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).