Frage von DerBennster, 49

C# namespaces in klassen?

Ich bin dabei eine Klassenbibilotheke zu erstellen. Eine Klasse names Sorting besteht aus verschiedenen Sortieralgorhytmen. In dieser Klasse habe ich jetzt zb den Algorhytmus QuickSort, jedoch möchte ich das ganze so haben, dass ich in Quicksort erst die Methode IntAscending habe. Also das ganze soll so im programm abgerufen werden:

int[] sortedarray = Sorting.QuickSort.IntAscending({4, 2, 3, 1, ...});

wie kann ich das lösen?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von EightSix, 23

Mach eine Klasse Quicksort und erstelle eine Instanz davon in Sorting und stelle einen öffentlichen Getter bereit.

Kommentar von DerBennster ,

Ich habe das jetzt so gemacht das ich eine Instanz von QuickSort in Sorting erstelle, und es funktioniert. Ich habe meine Frage etwas falsch gestellt, ich wollte das eigentlich so das ich die Klasse Sorting habe. Darin befinden sich dann einzelne "Bereiche", also QuickSort MergeSort etc. und in jedem dieser Bereiche befinden sich die Methoden IntAscending und IntDescending, welche auch in jedem "Bereich" gleich heißen. Ich will allerdings in meinem Programm nur ein objekt Sorting erstellen müssen und von dort aus sowohl auf den Bereich QuickSort als auch auf den Bereich MergeSort zugreifen. Das sollte dann im code so aussehen:

Sorting sort = new Sorting();
sort.QuickSort.IntAscending(int[] array);
sort.MergeSort.IntAscending(int[] array);

etc...

Es funktioniert jetzt erstmal, aber ich frage morgen nochmal meinen Lehrer ob es da eine schönere Lösung gibt. Danke :)

Kommentar von EightSix ,

Die Klassen QuickSort und MergeSort können die Funktionen ja erben von ihrer Basisklasse oder wenn sie bereits Kindklassen sind dann mittels Interface.

Antwort
von CrystalixXx, 21

Du könntest "QuickSort" als Klasse definieren, die eine Methode "IntAscending" hat, dann sollte aber "Sorting" als Namespace definiert werden. Anders erscheint mir das Design inkonsistent und unlogisch.

Vielleicht könntest du aber auch eine Basisklasse "Sorting" erzeugen, die die Methoden "Initialize" und "Sort" besitzt. Dann kannst du deine anderen Algorithmen von der Klasse ableiten und könntest Objekte von den verschiedenen Algorithmen beliebig im Programmcode einsetzen und mit anderen austauschen.

Kommentar von JavaTheHutt ,

Zusätzlich sollte diese Klasse "QuickSort" von einem Interface erben, die nur eine Methode (eventuell mit verschiedenen Parametern) hat - "Sort". Dabei solltest du entweder die Reihenfolge als Enum angeben oder die Sortierung als IComparer übergeben lassen. Damit wären wir dann auch fast wieder bei "IEnumerable.OrderBy" oder "IList.Sort", die Funktionen zur Sortierung definieren.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten