Podsumowanie – własna lista
Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 40 z 70.
Wyzwanie
ŁatwyZbudujmy klasę CustomList, która łączy wszystkie zaawansowane funkcje z tego rozdziału — przeciążanie operatorów, indeksatory, przesłonięcie ToString() i metody rozszerzające — aby utworzyć kolekcję, z której korzysta się w naturalny i intuicyjny sposób.
Rozmieścisz kod w trzech plikach:
CustomList.cs: Utwórz klasęCustomListw przestrzeni nazwCollections, która opakowuje wewnętrzną tablicę liczb całkowitych i zapewnia intuicyjne sposoby dostępu. Twoja lista powinna mieć:- Prywatną tablicę liczb całkowitych do przechowywania elementów oraz właściwość
Count(z prywatnym setterem) śledzącą liczbę przechowywanych elementów - Konstruktor przyjmujący pojemność (liczbę całkowitą) i inicjujący wewnętrzną tablicę o takim rozmiarze
- Metodę
Add(int item), która dodaje element na następnej dostępnej pozycji (jeśli jest miejsce) - Indeksator
this[int index], który umożliwia pobieranie i ustawianie elementów według ich pozycji - Przeciążony operator
+, który łączy dwie listy CustomList w nową listę zawierającą wszystkie elementy z obu (pojemność nowej listy powinna być sumą liczników obu list) - Przesłoniętą metodę
ToString(), która zwraca elementy w formacie[item1, item2, item3]— uwzględniaj tylko elementy aż doCount, a nie puste miejsca
- Prywatną tablicę liczb całkowitych do przechowywania elementów oraz właściwość
ListExtensions.cs: Utwórz klasę statycznąListExtensionsw przestrzeni nazwCollectionsz metodą rozszerzającą dla klasy CustomList:Sum()— zwraca sumę wszystkich elementów listy (aż doCount)
Program.cs: W głównym pliku utwórz dwie listy CustomList, dodaj elementy do każdej z nich, a następnie pokaż działanie wszystkich funkcji razem — użyj indeksatora, aby uzyskać dostęp do elementów, połącz listy operatorem+, wypisz je za pomocąToString()i oblicz sumę przy użyciu metody rozszerzającej.
Otrzymasz sześć danych wejściowych:
- Trzy liczby całkowite do dodania do pierwszej listy
- Trzy liczby całkowite do dodania do drugiej listy
Utwórz pierwszą listę o pojemności 5, a drugą o pojemności 3. Dodaj trzy wartości wejściowe do odpowiedniej listy.
Wypisz wynik w tym formacie:
List 1: {ToString()}
List 2: {ToString()}
List 1[0]: {first item}
Combined: {ToString() of combined list}
Combined sum: {Sum()}Na przykład, jeśli danymi wejściowymi są 10, 20, 30, 5, 15 i 25, wynik powinien być następujący:
List 1: [10, 20, 30]
List 2: [5, 15, 25]
List 1[0]: 10
Combined: [10, 20, 30, 5, 15, 25]
Combined sum: 105Zwróć uwagę, jak wszystkie elementy współpracują ze sobą — indeksator zapewnia dostęp podobny do dostępu do tablicy, operator + pozwala w naturalny sposób łączyć listy, ToString() zapewnia czytelny wynik, a metoda rozszerzająca dodaje użyteczną funkcjonalność. Tak działają dobrze zaprojektowane klasy!
Spróbuj swoich sił
using System;
using Collections;
class Program
{
public static void Main(string[] args)
{
// Wczytaj sześć liczb całkowitych
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: Utwórz pierwszą CustomList o pojemności 5
// TODO: Dodaj a1, a2, a3 do pierwszej listy
// TODO: Utwórz drugą CustomList o pojemności 3
// TODO: Dodaj b1, b2, b3 do drugiej listy
// TODO: Wypisz listę 1 za pomocą ToString()
// TODO: Wypisz listę 2 za pomocą ToString()
// TODO: Wypisz element 1[0] listy za pomocą indeksatora
// TODO: Połącz listy za pomocą operatora + i wypisz wynik
// TODO: Wypisz sumę elementów połączonej listy za pomocą metody rozszerzającej Sum()
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrznePrzestrzenie nazw i dyrektywyWprowadzenie do klas i obiektówSłowo kluczowe „this”Metody i parametryPola a właściwościKonstruktoryInicjalizatory obiektówPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawowa składnia dziedziczenia (:)Słowo kluczowe 'base'Słowa kluczowe virtual i overrideKlasy sealedBazowa klasa 'object'Powtórzenie – hierarchia pracowników7Zaawansowane funkcje
Przeciążanie operatorówIndeksery (this[])Nadpisywanie ToString()Metody rozszerzającePodsumowanie – własna lista2Właściwości i składowe statyczne
Właściwości automatyczneWłaściwości tylko do odczytu i zapisuPola i metody statyczneKlasy statyczneSkładowe z ciałem wyrażeniowym5Polimorfizm i interfejsy
Polimorfizm czasu kompilacji a czasu wykonaniaInterfejs a klasa abstrakcyjnaWiele interfejsówJawne implementowanie interfejsówRzutowanie w górę i w dółPowtórka — kalkulator kształtów8Zaawansowane koncepcje OOP
Kompozycja zamiast dziedziczeniaTypy generyczne (klasy i metody)Delegaty i zdarzeniaAtrybuty i refleksjaIDisposable i instrukcja usingPodstawy wstrzykiwania zależności11Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu3Architektura klas
Dane instancji a dane statyczneSłowa kluczowe 'readonly' i 'const'Pola zapasowePowtórzenie — menedżer kont bankowych6Hermetyzacja
Modyfikatory dostępuWłaściwości w hermetyzacjiImplementacja ukrywania danychWzorce niezmiennościPowtórka — dane studentów9Argumenty zmiennej liczby
Słowo kluczowe „params”Parametry opcjonalneArgumenty nazwanePrzeciążanie metodPoćwicz samodzielnie: Kompilator C# online