Ten problem został włączony/wyłączony, a ja napisałem 4 opakowania. Jestem pewien, że robię to źle i muszę dowiedzieć się, gdzie moje zrozumienie się rozwija.C# dziedziczenie bazy
Załóżmy, że używam klasy Rectangle do przedstawienia prętów metalowych. (działa to lepiej niż zwierzęta).
Powiedzmy, że klasa bazowa nazywa się "Bar".
private class Bar
{
internal Rectangle Area;
}
Tak. Teraz tworzymy prostokąt, powiedzmy 300 jednostek na 10 jednostek.
private Bar CreateBar()
{
Bar1 = new Bar1();
Bar1.Area = new Rectangle(new Point(0,0), new Size(300,10));
return Bar1;
}
Fantastycznie, więc mamy pasek podstawowy.
Teraz powiedzmy, że chcemy, aby ten pręt miał materiał - na przykład stal. Więc. . .
private class SteelBar : Bar
{
string Material;
}
Więc jeśli to zrobiłem. . .
private SteelBar CreateSteelBar()
{
SteelBar SteelB = new SteelB();
Bar B = CreateBar();
SteelB = B;
SteelB.Material = "Steel";
return SteelB;
}
Z tego co ja się z tego, jeśli zadzwonię CreateSteelBar, tworzy steelbar który wywołuje CreateBar. Tak więc kończę na stalowym pręcie o prostokącie 300 na 10 i pustym sznurkiem na materiał. Potem ustawiłem materiał na stal.
Kiedy próbuję czegoś podobnego w moim programie, mówi, że nie mogę niejawnie utworzyć wyższej klasy wyższej z niższej klasy. Pomyślałem, że to dlatego dziedziczenie istnieje ze względu na wszystkie przypadki z przykładów zwierząt, które widzę, ale mam nadzieję, że ktoś może mnie oczyścić.
Ponadto, jestem pewien, że mogę zadzwonić pod numer SteelBar = CreateBar();
, ale zrobiłem to tutaj.
Nie jest dla mnie jasne, dlaczego nie używasz konstruktorów. To znacznie uprościłoby twój problem. –
Nie zwracasz wartości w 'CreateBar()' –
W tym przypadku - w moim systemie tworzę rozszerzenie dla czegoś, co ma od 1 do 500 elementów wewnątrz niego. – Charles