Menu
Coddy logo textTech

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

challenge icon

Wyzwanie

Łatwy

Zbudujmy 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ę Product w przestrzeni nazw Inventory. 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ę ElectronicProduct w przestrzeni nazw Inventory, która dziedziczy po Product. Ta klasa dodaje właściwość WarrantyMonths (int). Konstruktor powinien przyjmować nazwę, cenę i liczbę miesięcy gwarancji — użyj base, 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 obiekt ElectronicProduct, używając wartości wejściowych, i wyświetl pełne informacje, wywołując GetInfo().

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
        
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C# online