Dziedziczenie kontruktorów w C#

0

Z tego co wyczytałem w literaturze, kontruktory nie dziedziczą się, lecz....

public class Zwierz{
		public Zwierz(string name,float masa){
			this.masa=masa;
			nazwa=name;
		}
}
public class Saki : Zwierz{
}
 

Kod został mocno okrojony, ale nie o to chodzi...

Gdy próbuje uruchomic to tak jak jest wywala błąd:

Element Zwierzeta.Zwierz nie zawiera konstruktora, który przyjmowałby taką liczbę argumentów: 0

Co by oznaczało, że kontruktor dziedziczy po klasie bazowej(chyba że się myle, to prosze o poprawienie).

0

Konstrukorów się nie dziedziczy,tutaj masz błąd polegający na tym,iż nie zdefiniowałeś konstruktora domyślnego klasy Zwierz.I teraz kiedy przychodzi do tworzenia obiektu Saki (Ssak chyba miało być btw :P) to bidny C# nie może tego zrobić z braku owegoż konstruktora właśnie.
Wyjścia masz dwa,albo dodefiniować brakujący domyślny konstruktor do Zwierza,albo w Ssaku stworzyć konstruktor jawnie wywołujący już istniejący konstruktor Zwierza poprzez base(name,masa)

0

Odpowiedź MasterBLB jest w 100% poprawna i nie mam nic do dodania. Tylko żeby było prościej Ci błąd poprawić, tak wyglądają twoje wyjścia:

public class Zwierz{
                public Zwierz(string name,float masa){
                        this.masa=masa;
                        nazwa=name;
                }
}
public class Saki : Zwierz{
    public Saki(string name,float masa) : base(name, masa) { }
}
 

Albo

public class Zwierz{
                public Zwierz() {} // nic nie robimy - raczej nie o to ci chodzi ale taką opcję również masz.
                public Zwierz(string name,float masa){
                        this.masa=masa;
                        nazwa=name;
                }
}
public class Saki : Zwierz{
}
0

Do rozwiązań już sam doszedłem(czyt. wiem jak zrobić aby działało), lecz dalej mnie intryguje co klasa bazowa ma do konstruktora klasy nardzędnej(nawet domyślnego)?
Bardziej dosadnie - co ją obchodzi jaki konstruktor jest w klasie bazowej, jak z niego nie korzysta(a może korzysta)?

PS. Ten przykład to przykład żywcem spisany z tablicy nauczyciela programowania (wymaga takich samych nazw klas,zmiennych,itp jak na tablicy), a to że bardzo często robi takie śmieszne błędy ort(a my go specjalnie nie poprawiamy), to inna bajka...

0

Bardziej dosadnie - co ją obchodzi jaki konstruktor jest w klasie bazowej, jak z niego nie korzysta(a może korzysta)?

Korzysta, bo pola klasy bazowej muszą być zainicjalizowane. Jeśli nie podasz po dwukropku który konstruktor ma się wykonać, wywołany będzie bezparametrowy. Jeśli go nie ma - dupa.

0
andrew8666 napisał(a)

Bardziej dosadnie - co ją obchodzi jaki konstruktor jest w klasie bazowej, jak z niego nie korzysta(a może korzysta)?

Ponieważ w klasie 'Saki' nie zdefiniowano żadnego konstruktora, to jest niejawnie dodawany domyślny konstruktor bezparametrowy, który wywołuje bezparametrowy konstruktor z klasy bazowej. Ale w klasie bazowej nie ma konstruktora bezparametrowego, bo został już w niej jawnie zdefiniowany jakiś konstruktor, a w takiej sytuacji nie ma konstruktora domyślnego.

0

Dzięki za trud, teraz już będe wiedział :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1