Słowo kluczowe 'base'
Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 20 z 70.
Gdy klasa pochodna dziedziczy po klasie bazowej, często trzeba uzyskać bezpośredni dostęp do składowych klasy nadrzędnej. Słowo kluczowe base zapewnia takie połączenie, umożliwiając wywołanie konstruktora klasy bazowej lub dostęp do jej metod i właściwości.
Najczęstszym zastosowaniem base jest wywołanie konstruktora klasy nadrzędnej. Podczas tworzenia obiektu pochodnego możesz przekazać wartości do klasy bazowej:
public class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Name = name;
}
}
public class Dog : Animal
{
public string Breed { get; set; }
public Dog(string name, string breed) : base(name)
{
Breed = breed;
}
}Składnia : base(name) wywołuje konstruktor klasy Animal przed uruchomieniem treści konstruktora Dog. Dzięki temu klasa bazowa jest najpierw prawidłowo inicjalizowana.
Możesz również użyć base, aby wywoływać metody klasy bazowej z poziomu klasy pochodnej:
public class Animal
{
public void Speak()
{
Console.WriteLine("Animal sound");
}
}
public class Dog : Animal
{
public void Speak()
{
base.Speak(); // Wywołuje metodę Speak klasy Animal
Console.WriteLine("Woof!");
}
}Tutaj base.Speak() jawnie wywołuje wersję metody z klasy nadrzędnej. Jest to przydatne, gdy chcesz rozszerzyć zachowanie klasy nadrzędnej, zamiast całkowicie je zastąpić.
Wyzwanie
ŁatwyZbudujmy system inwentaryzacji produktów, który pokazuje, jak klasy pochodne używają słowa kluczowego base, aby prawidłowo inicjalizować klasę nadrzędną i rozszerzać odziedziczone zachowanie.
Utworzysz trzy pliki, aby uporządkować swój kod:
Product.cs: Zdefiniuj klasęProductw przestrzeni nazwInventory. Ta klasa bazowa reprezentuje dowolny produkt z właściwościąName(string) i właściwościąPrice(decimal). Dodaj konstruktor przyjmujący obie wartości oraz metodęGetInfo(), która zwraca"{Name}: ${Price}".ElectronicProduct.cs: Zdefiniuj klasęElectronicProductw przestrzeni nazwInventory, która dziedziczy poProduct. Ta klasa dodaje właściwośćWarrantyMonths(int). Konstruktor powinien przyjmować nazwę, cenę i liczbę miesięcy gwarancji — użyjbase, aby przekazać nazwę i cenę do konstruktora klasy nadrzędnej. Utwórz metodęGetInfo(), która najpierw wywołuje metodęGetInfo()klasy nadrzędnej za pomocąbase, a następnie dopisuje" (Warranty: {WarrantyMonths} months)", rozszerzając wynik.Program.cs: W pliku głównym utwórz obiektElectronicProduct, używając wartości wejściowych, i wyświetl pełne informacje, wywołującGetInfo().
Otrzymasz trzy dane wejściowe:
- Nazwa produktu
- Cena
- Liczba miesięcy gwarancji
Wyświetl wynik wywołania GetInfo() dla swojego produktu elektronicznego.
Na przykład, jeśli danymi wejściowymi są Laptop, 999.99 i 24, wynikiem powinno być:
Laptop: $999.99 (Warranty: 24 months)Zwróć uwagę, jak klasa pochodna opiera się na wyniku klasy bazowej, zamiast powielać logikę. Słowo kluczowe base pozwala płynnie ponownie wykorzystać i rozszerzyć zachowanie klasy nadrzędnej!
Spróbuj swoich sił
using System;
using Inventory;
class Program
{
public static void Main(string[] args)
{
// Wczytaj dane wejściowe
string name = Console.ReadLine();
decimal price = Convert.ToDecimal(Console.ReadLine());
int warrantyMonths = Convert.ToInt32(Console.ReadLine());
// TODO: Utwórz ElectronicProduct z wartościami wejściowymi
// TODO: Wypisz wynik wywołania GetInfo() dla swojego produktu elektronicznego
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
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