C# Dziedziczenie strumienia

0

Witam piszę program do 'nauki języka' w c#. Chciałbym aby funkcja klasy pochodnej wczytywała zmienną string z pliku tym samym strumieniem co klasa bazowa. W pliku w kolejnych liniach jest znaczenie polskie, znaczenia angielskie i chciałbym przypisać wartość pól tymi liniami. W jaki sposób to zrobić ? Tutaj jest mój kod(który nie działa).
Tutaj klasa bazowa:

public class Slowo { public string znPol { get; set; } public string WordPath { get; set; } public virtual void OpenFile(string WordPath) { this.WordPath = WordPath; using(StreamReader reader = new StreamReader(WordPath)) { znPol = reader.ReadLine();
       }
   }
Tutaj pochodna:
<code class="c#">
  public class JezykAngielski: Slowo
    {
        public string znAng { get; set; }
       
        public override void OpenFile(string WordPath)
         {
 	     base.OpenFile(WordPath);
         znAng = reader.Readline;
         }
    }
0

Język angielski jest słowem?
Słowo ma funkcję otworzenia pliku?
Ale bzdury

Nie używaj obiektowości, napisz sobie wszystko strukturalnie dopóki nie przeczytasz jakiejś książki

0

Dobra może będzie prościej, w jaki sposób 2-gą linie z pliku tekstowego?

0

Twój kod jest równoważny temu:

public class JezykAngielski { public string znPol { get; set; } public string WordPath { get; set; }
    public string znAng { get; set; }
   
    public void OpenFile(string WordPath)
     {
       this.WordPath = WordPath;
       StreamReader reader;
       try
       {
           reader = new StreamReader(WordPath);
           znPol = reader.ReadLine();
       }
       finally
       {
           reader.Dispose();
       }
       znAng = reader.Readline;
     }
}

znajdź problem samemu
0

Mój problem polega na tym, że ten program musi posiadać założenia obiektowości... wiem jak to zrobić bez dziedziczenia, tylko muszę dodać to dziedziczenie i poliformizm.

0

a jaka jest treść zadania? bo tu nie za bardzo można wcisnąć polimorfizm
w zadaniu jest że obiektowość musi być bezsensowna? jest tu miejsce na małą liczbę obiektów - między innymi przydałby się kontener dla słów trzymających słowo polskie i angielskie
choć właściwie to można wykorzystać Tuple / KeyValuePair albo dziedziczyć z nich

powinieneś też utworzyć obiekt który będzie zarządzał tymi słowami; klasa która będzie czytać je z pliku, ewentualnie zapisywać
no i masz już dwa obiekty a jeszcze zero funkcjonalności; myślę że jeszcze dasz radę utworzyć kilka obiektów więcej

rzucanie strumieniem między klasami tak żeby jedna odczytywała linie parzyste a druga nieparzyste to raczej poroniony pomysł

0

Tak, pewnie masz rację, jestem laikiem jeśli chodzi o programowanie, dlatego się tutaj udałem.
Mam napisać program do nauki języka, w którym będą zawarte podstawowe założenia paradygmatu obiektowego.
Sam program wiem jak zrobić 'w 1 klasie' za pomocą WindowsForm, ale jak do tego dochodzi kilka klas to się zaczyna problem, bo według mnie w tym programie to tylko utrudnia mi zadanie zamiast ułatwiać.

1

wyobraź sobie problem w realnym świecie
każda "rzecz" jest potencjalnym obiektem
w prostych programach rzeczywiście obiektowość bardziej przeszkadza niż pomaga, ale po stworzeniu szkieletu dużo łatwiej się je rozwija

w tym przypadku mógłbyś sobie wyobrazić karty do nauki
masz kartę na której napisane są słówka, masz też stos kart z których je pobierasz; jeśli chodzi o wizualizację to te karty muszą z kolei na czymś leżeć
ktoś (ty czy ktoś inny) musi je po kolei wyciągać ze stosu, kłaść, potem Ty mówisz znaczenie, a ktoś / coś odwraca kartę, sprawdza czy się zgadza i odkłada kartę
łatwo to przenieść na obiekty i odpowiednie metody tych metod

0

Taki szkic, trochę na siłę ale może coś w tym stylu?

public interface IPozycje
	{
		List<Pozycja> ZbiórPozycji { get; set; }

		void Dodaj(Pozycja pozycja);

		void WczytajSłownik(string ścieżka);

		Pozycja Znajdz(string słowo);
	}

	public interface ISłownik
	{
		Pozycja Tłumacz(string słowo);

		Pozycja ZnajdźPozycje(string słowo);
	}

	public abstract class Pozycja
	{
		public string Hasło { get; set; }

		public string Znaczenie { get; set; }
	}

	public abstract class PozycjeSłownika : IPozycje
	{
		public List<Pozycja> ZbiórPozycji { get; set; }

		public void Dodaj(Pozycja pozycja)
		{
			throw new NotImplementedException();
		}

		public void WczytajSłownik(string ścieżka)
		{
			throw new NotImplementedException();
		}

		public Pozycja Znajdz(string słowo)
		{
			throw new NotImplementedException();
		}
	}

	public class SłownikPolskoAngielski : ISłownik
	{
		private PozycjeSłownika SłownikAngielski { get; set; }

		private PozycjeSłownika SłownikPolski { get; set; }

		public void DodajPozycjeDoSłownikaPolskiego(Pozycja pozycja)
		{
			throw new NotImplementedException();
		}

		public void DodajPozycjeDoSłownikaAngielskiego(Pozycja pozycja)
		{
			throw new NotImplementedException();
		}

		public Pozycja Tłumacz(string słowo)
		{
			throw new NotImplementedException();
		}

		public Pozycja ZnajdźPozycje(string słowo)
		{
			throw new NotImplementedException();
		}
	}
0

Być może moja wypowiedź nic nie wnosi ale szkielet który przedstawił @DibbyDum jest dobrą podstawą do dalszej implementacji. Z góry dopowiem że to tylko że ten szkic nie jest gotowym rozwiązaniem. Wszystkie NotImplementedException muszą być zamienione na działający kod ;]

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