Rückblick – Benutzerdefinierte Liste
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 40 von 70.
Aufgabe
EinfachErstellen wir eine CustomList-Klasse, die alle fortgeschrittenen Funktionen dieses Kapitels vereint – Operatorüberladung, Indexer, Überschreiben von ToString() und Erweiterungsmethoden –, um eine Sammlung zu erstellen, die sich natürlich und intuitiv verwenden lässt.
Du organisierst deinen Code auf drei Dateien:
CustomList.cs: Erstelle eineCustomList-Klasse im NamespaceCollections, die ein internes Ganzzahlarray kapselt und intuitive Zugriffsmuster bereitstellt. Deine Liste sollte Folgendes enthalten:- Ein privates Ganzzahlarray zum Speichern der Elemente und eine
Count-Eigenschaft (mit privatem Setter), die verfolgt, wie viele Elemente gespeichert sind - Einen Konstruktor, der eine Kapazität (Ganzzahl) akzeptiert und das interne Array auf diese Größe initialisiert
- Eine Methode
Add(int item), die ein Element an der nächsten verfügbaren Position hinzufügt (falls Platz vorhanden ist) - Einen Indexer
this[int index], der das Abrufen und Setzen von Elementen anhand ihrer Position ermöglicht - Einen überladenen
+-Operator, der zwei CustomLists zu einer neuen Liste zusammenführt, die alle Elemente beider Listen enthält (die Kapazität der neuen Liste sollte der Summe beider Anzahlen entsprechen) - Eine überschriebene
ToString()-Methode, die die Elemente im Format[item1, item2, item3]zurückgibt – berücksichtige nur Elemente bisCount, nicht leere Positionen
- Ein privates Ganzzahlarray zum Speichern der Elemente und eine
ListExtensions.cs: Erstelle eine statische KlasseListExtensionsim NamespaceCollectionsmit einer Erweiterungsmethode für deine CustomList:Sum()– gibt die Summe aller Elemente in der Liste zurück (bisCount)
Program.cs: Erstelle in deiner Hauptdatei zwei CustomLists, füge jeder Elemente hinzu und demonstriere anschließend, wie alle Funktionen zusammenarbeiten – verwende den Indexer, um auf Elemente zuzugreifen, führe Listen mit dem+-Operator zusammen, gib sie mitToString()aus und berechne die Summe mithilfe deiner Erweiterungsmethode.
Du erhältst sechs Eingaben:
- Drei Ganzzahlen, die zur ersten Liste hinzugefügt werden sollen
- Drei Ganzzahlen, die zur zweiten Liste hinzugefügt werden sollen
Erstelle die erste Liste mit der Kapazität 5 und die zweite mit der Kapazität 3. Füge jeder jeweiligen Liste die drei Eingabewerte hinzu.
Gib die Ausgabe in diesem Format aus:
List 1: {ToString()}
List 2: {ToString()}
List 1[0]: {first item}
Combined: {ToString() of combined list}
Combined sum: {Sum()}Wenn die Eingaben beispielsweise 10, 20, 30, 5, 15 und 25 lauten, sollte die Ausgabe folgendermaßen aussehen:
List 1: [10, 20, 30]
List 2: [5, 15, 25]
List 1[0]: 10
Combined: [10, 20, 30, 5, 15, 25]
Combined sum: 105Beachte, wie alle Bestandteile zusammenarbeiten – der Indexer ermöglicht dir einen arrayähnlichen Zugriff, der +-Operator erlaubt es dir, Listen auf natürliche Weise zusammenzuführen, ToString() liefert eine lesbare Ausgabe und die Erweiterungsmethode fügt nützliche Funktionalität hinzu. So fühlen sich gut entworfene Klassen an!
Probier es selbst
using System;
using Collections;
class Program
{
public static void Main(string[] args)
{
// Lies sechs Ganzzahlen ein
int a1 = Convert.ToInt32(Console.ReadLine());
int a2 = Convert.ToInt32(Console.ReadLine());
int a3 = Convert.ToInt32(Console.ReadLine());
int b1 = Convert.ToInt32(Console.ReadLine());
int b2 = Convert.ToInt32(Console.ReadLine());
int b3 = Convert.ToInt32(Console.ReadLine());
// TODO: Erstelle die erste CustomList mit einer Kapazität von 5
// TODO: Füge a1, a2, a3 zur ersten Liste hinzu
// TODO: Erstelle die zweite CustomList mit einer Kapazität von 3
// TODO: Füge b1, b2, b3 zur zweiten Liste hinzu
// TODO: Gib Liste 1 mit ToString() aus
// TODO: Gib Liste 2 mit ToString() aus
// TODO: Gib Liste 1[0] über den Indexer aus
// TODO: Kombiniere die Listen mit dem + Operator und gib das Ergebnis aus
// TODO: Gib die Summe der kombinierten Liste mit der Sum() Erweiterungsmethode aus
}
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjektinitialisiererWiederholung – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbungs-(:)-SyntaxDas „base“-Schlüsselwort„virtual“- und „override“-SchlüsselwörterVersiegelte KlassenDie „object“-BasisklasseWiederholung – Mitarbeiterhierarchie7Erweiterte Funktionen
Überladen von OperatorenIndexer (this[])ToString()-ÜberschreibungErweiterungsmethodenRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterThread-sicheres SingletonFactory-MusterObserver-Muster (Events)Strategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformKomponente für SpielfigurenFahrzeugvermietungsdienst2Eigenschaften & statische Member
Automatisch implementierte EigenschaftenNur lesbare/schreibbare EigenschaftenStatische Felder & MethodenStatische KlassenMember mit Ausdruckskörpern5Polymorphie & Interfaces
Compile- vs. Laufzeit-PolymorphieInterface vs. abstrakte KlasseMehrere InterfacesExplizite InterfacesUpcasting & DowncastingWiederholung – Formenrechner3Klassenarchitektur
Instanz- vs. statische DatenSchlüsselwörter 'readonly' & 'const'Backing FieldsRückblick – Bankkontenverwaltung6Kapselung
ZugriffsmodifikatorenEigenschaften zur KapselungImplementierung der DatenkapselungMuster für UnveränderlichkeitRückblick – SchülerdatenÜbe selbstständig: Online-C#-Compiler