Dziedziczenie lub inne rozwiązanie

0

Witam

W programie używam klasy, która wykonuje pewne operacje, ale część operacji jest uzależniona od rodzaju klasy. Użyłem do tego dziedziczenia i przykładowy kod wygląda tak:

class Bazowa
    {
        protectedstring tekst1;
        protected string tekst2;
        protected PotomekPrivate pp = null;

        public Bazowa()
        {

        }
        public Bazowa(string tekst1, string tekst2)
        {
            this.tekst1 = tekst1;
            this.tekst2 = tekst2;

            pp = new PotomekPrivate();
        }

        public virtual void Wyswietl()
        {
            
        }

        protected class PotomekPrivate:Bazowa
        {
            public void WyswietlDane()
            {
                Console.WriteLine(tekst1 + " " + tekst2);
            }
        }
    }

    class PotomekG1 : Bazowa
    {
        public PotomekG1(string tekst1, string tekst2)
            : base(tekst1, tekst2)
        {

        }

        public override void Wyswietl()
        {
            pp.WyswietlDane();
        }
    }
    class PotomekG2 : Bazowa
    {
        public PotomekG2(string tekst1, string tekst2)
            : base(tekst1, tekst2)
        {

        }

        public override void Wyswietl()
        {
            pp.WyswietlDane();
        }
    }

Mam klasę "Bazowa", do której rzutuję obiekt klasy "PotomekGx". Klasa "PotomekGx" odpowiada za wykonanie specyficznych operacji. Wewnątrz klasy "Bazowa" posiadam klasę "PotomekPrivate", w której będę wykonywał operacje, które nie są uzależnione od rodzaju klasy tak jak "PotomekGx". Klasa ta dziedziczy po klasie "Bazowa" ponieważ potrzebuje ona dostępu do wszystkich pól klasy bazowej tak samo jak klasa "PotomekGx". W klasie "Bazowa" tworzę sobie obiekt klasy "PotomekPrivate" do którego dostęp będą miały wszystkie klasy "PotomekGx".
Problem w tym, że klasa "PotomekPrivate" tworzy własną instancję klasy bazowej i wtedy klasy "PotomekPrivate" i "PotomekGx" nie pracują na tych samych danych zawartych w klasie bazowej.

Dla przykładu wywołanie:

Bazowa bazowa = new PotomekG1("Tekst1", "Tekst 2");
bazowa.Wyswietl();

od razu pokazuje o co mi chodzi, w czym jest problem.

Trochę się w tym pogmatwałem i być może rozwiązanie tego problemu jest banalne, ale w tej chwili tego nie widzę :(
Być może trzeba podejść od tego z innej strony i inaczej zorganizować kod. Ja to analizowałem na różne sposoby i wyszło mi że tak byłoby najlepiej :)
Proszę o pomoc, każda wskazówka może być pomocna.

0

Ja w ogóle nie widzę sensu istnienia klasy PotomekPrivate. Przecież operacje niezależne od rodzaju klasy mogłyby być w klasie Bazowa.

0
somekind napisał(a)

Ja w ogóle nie widzę sensu istnienia klasy PotomekPrivate. Przecież operacje niezależne od rodzaju klasy mogłyby być w klasie Bazowa.

Bez komentarza ;) Tak jak pisałem wcześniej trochę się w tym pogmatwałem i nie wiem dlaczego wbiłem sobie do głowy że operacje wykonywane bez względu na rodzaj klasy mogą być w klasie bazowej jedynie w przypadku kiedy klasa potomna wywołuje base.Metoda, a w takim przypadku pisanie metod w każdej klasie potomnej byłoby głupotą. Nie wiem skąd mi się to wzięło.

W każdym razie dzięki za pomoc. Temat uważam za zamknięty.

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