Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Ondra Toman
Člen
Avatar
Ondra Toman:1.8.2019 0:20

Předem říkám že název není úplně odpovídající ale nic lepšího mě nenapadlo. K věci: udělal jsem si bankovní program kde mam třídu klient, banka a účet. banka dědí z klienta a klient si v konstruktoru vytváří účet. taky je tam výstup do konzole kde se mi vypíše že se vytvořila instance klienta. jenže když vytvořim instanci banky tak nechci aby se vypsalo vytvoření klienta ale vytvoření banky. jak toho docílit?

class Klient
{
        public jmeno { get; protected set;}

        public Klient(string jmeno)
        {
                this.jmeno = jmeno;
                Ucet ucet = new Ucet();
                Console.WriteLine("Klient vytvořen");
        }
}

class Banka: Klient
{
        public Banka(string jmeno): base(jmeno)
        {
                Console.WriteLine("Banka vytvořena");
        }
}

Zkusil jsem:

Chci docílit:

 
Odpovědět
1.8.2019 0:20
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Ondra Toman
Martin Petrovaj:1.8.2019 0:29

Nedocieliš. Celé to spočíva v tom, že konštruktor banky najprv volá konštruktor triedy, z ktorej je banka oddedená (to je to volanie "base(jmeno)").

Pokiaľ pôvodná trieda nemá bezparametrický konštruktor, tak sa tomu jednoducho nevyhneš. Niektorý base konštruktor zavolať proste musíš - inak by hrozilo, že premenné, ktoré banka zdedila z klienta nebudú nainicializované a tým pádom tvoj objekt nebude fungovať správne.

Nahoru Odpovědět
1.8.2019 0:29
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Ondra Toman
Člen
Avatar
Odpovídá na Martin Petrovaj
Ondra Toman:1.8.2019 0:34

dobře a jak bys to tedy udělal ty? přijde mi hloupé při každém vytváření banky/ klienta psát další řádek kterej to vypíše.

 
Nahoru Odpovědět
1.8.2019 0:34
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Ondra Toman
Martin Petrovaj:1.8.2019 1:22
  1. Nepoznám tvoj use case. Netuším, čo chceš docieliť a aký má význam vypisovať takto v konštruktore do konzoly.
  2. Ak chceš vytvoriť napr. nejaké logovanie pri založení nového konta alebo čohokoľvek podobného, tak by som to na 90% nerobil v konštruktore, ale v kóde, ktorý tie nové inštancie vytvára, prípadne pri ukladaní nového konta do DB.
  3. Či už by riešenie z bodu 2 malo väčší zmysel alebo nie, premyslel by som si návrh tvojej aplikácie. Dedičnosť "Klient <- Banka" mi osobne nepripadá ako najlogickejší vzťah v akomkoľvek IS. Opäť sme ale pri tom, že nepoznám tvoje zadanie a aké problémy či use cases sa snažíš riešiť.
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
1.8.2019 1:22
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Ondra Toman
Člen
Avatar
Odpovídá na Martin Petrovaj
Ondra Toman:1.8.2019 10:58

myšlenka je taková že budu mít server banky (to dělám teď) a ten bude ovládat veškerou logiku a potom bude WPF klient který se připojí přes internet a bude jen posílat požadavky na server.
tu dědičnost jsem tak zvolil jelikož ta banka stejně jako klient má jméno, účet, funkci na poslání peněz a výpis zůstatku a navíc má ještě směnu měny takže mi to přišlo logické. ten výstup na server je tu jenom jako info pro mě abych věděl co ten server dělá.
každopádně to udělám tak jak jsi psal v bodu 2. dává to asi největší smysl.
a jestli ti v tom návrhu něco přijde divné tak mi klidně napiš. tenhle projekt dělám především proto abych se něco naučil.

 
Nahoru Odpovědět
1.8.2019 10:58
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.