Wiele pochodnych klas abstrakcyjnych?
Muszę stworzyć system zarządzania kursami z kategoriami kursów:
Cooking, sewing and writing courses
gotowaniei
pisaniemają po 2 kursy (włoski, owoce morza, kreatywne pisanie i pisanie biznesowe). Tworzy to pochodne streszczenie:
abstract course -> abstract cooking -> concrete seafood
Abstrakcyjne gotowanie i pisanie mają wspólne pola i niektóre typowe metody, jednak mają również metody abstrakcyjne, które są abstrakcyjne w klasie bazowej.
Czy można to zrobić w C #? Jeśli utworzę pochodne metody abstrakcyjne klasy abstrakcyjnej, program Visual Studio powie, że ukrywają abstrakcyjną klasę bazową, a następnie konkretne metody klasy mają błędy, mówiąc, że klasa podstawowa powinna być abstrakcyjna (jest, ale nie powinien się rejestrować). Szukałem odpowiedzi. Wiem, że pojedyncze dziedziczenie jest używane w C #, ale dziedziczenie idzie w dół łańcucha. Jaka jest najlepsza odpowiedź?
Oto fragment kodu - mam nadzieję, że rozwiąże to problem:
public abstract class Course
{
public abstract void AddStudent(StudentName sn, int f);
public abstract decimal CalculateIncome();
}public abstract class WritingCourse : Course
{
public void AddStudent(StudentName sn, int f)
{
//Add student
}
public abstract decimal CalculateIncome();// can only be claculated in concrete
}public class BusinessWritCourse : WritingCourse
{
public void AddStudent(StudentName sn, int f):
base(sn, false){} public decimal CalculateIncome()
{
return//do stuff
}
}public class SewingCourse : Course
{
public override void AddStudent(StudentName sn, int f)
{
//do stuff
} public override decimal CalculateIncome()
{
return//do stuff
}
}
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
4 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
klas, mówi abstrakcyjne studio wizualne
że ukrywają abstrakcyjną klasę bazową i
Następnie Metody klasy betonowej mają
błędy mówiące, że klasa bazowa powinna być
streszczenie (jest, ale nie powinno być zarejestrowane)
Jeśli masz podstawową klasę "A", która ma abstrakcyjną metodę "b ()", wówczas nie musisz deklarować "b ()" jako abstrakcyjny w b: A, aby C: B zastępuje go, po prostu nie Użyj go. Nawet jeśli zastąpisz metodę "B ()" w klasie B, możesz go zastąpić w klasie "C ()" (a nawet użyj podstawy. (); Wdrożyć B.
Jakiś kod:
Wyjaśnijmy też: metody zadeklarowane jako abstrakcyjne muszą zostać przesłonięte (tak jak w interfejsie i tylko bezpośredni potomek klasy, która deklaruje metodę abstrakcyjną). Metody zadeklarowane jako wirtualne można zastąpić, ale nie są one wymagane.
Anonimowy użytkownik
Potwierdzenie od:
Były:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Jeśli mówisz o błędzie, który mówi coś w stylu „jakaś metoda ukrywa dziedziczonego członka, dodaj nowe słowo kluczowe, jeśli ukrywanie było zamierzone”, to wystarczy virtual w metodzie bazowej i nadpisanie odziedziczonej metody: