IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

Diskuze: Odkazování na jednu třídu vícekrát

Aktivity
Avatar
Petr Šťastný
Tvůrce
Avatar
Petr Šťastný:19.4.2016 19:36

Ahoj, potřebuji pomoct. Mám aplikaci, ve které mám zatím asi 6 tříd. Dvě z nich jsou základní a potřebuji ji volat ze všech ostatních. Jenže když chci např. třídu Hra linknout poprvé a zavolat Zobraz(), použiji

Hra hra = new Hra();
hra.Zobraz()

Jenže když to udělám podruhé nebo potřetí v jiné třídě, VS mi nenahlásí chybu, ale aplikaci hned spadne. Jak to mám udělat? Zkoušel jsem udělat např.

new Hra().Zobraz()

, ale to mi nefungovalo, všechny proměnné v třídě Hra se vyresetovaly.

 
Odpovědět
19.4.2016 19:36
Avatar
Odpovídá na Petr Šťastný
Michal Štěpánek:19.4.2016 19:44

Nezkusil sis to

hra.Zobraz();

spustit v Try-Catch a ošetřit vyjímku? Přeci to neumře jen tak bez chyby...

Nahoru Odpovědět
19.4.2016 19:44
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na Michal Štěpánek
Petr Šťastný:19.4.2016 20:02

On nedělá problém to hra.Zobraz();, ale přímo to

Hra hra = new Hra();
 
Nahoru Odpovědět
19.4.2016 20:02
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na Petr Šťastný
Petr Šťastný:19.4.2016 20:05

Jde to jenom v klasickým Program.cs, když na Hra.cs odkazuji z jiných .cs souborů, program okamžitě spadne.

 
Nahoru Odpovědět
19.4.2016 20:05
Avatar
Odpovídá na Petr Šťastný
Michal Štěpánek:19.4.2016 20:37

Pak máš asi něco špatně přímo na té třídě, zkus si "otry-catchovat" to vytváření instance, co to napíše a dej sem ten kód z té třídy Hra, ať se můžeme mrknout...

Nahoru Odpovědět
19.4.2016 20:37
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Šťastný
vajkuba1234:19.4.2016 22:02

A nechces zkusit tu tridu Hra predat v konstruktoru te tride, ve ktere ji budes potrebovat?

Nahoru Odpovědět
19.4.2016 22:02
No hope, no future, JUST WAR!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Šťastný
vajkuba1234:19.4.2016 22:20

Samozrejme jsem myslel predat referenci, nikoliv samotnou tridu...

Nahoru Odpovědět
19.4.2016 22:20
No hope, no future, JUST WAR!
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na vajkuba1234
Petr Šťastný:20.4.2016 8:34

Jak jsi to myslel? Co bych měl přesně udělat (A jak)?

Ať jsem zkoušel co jsem zkoušel, nejde to...

 
Nahoru Odpovědět
20.4.2016 8:34
Avatar
LacoS.
Člen
Avatar
LacoS.:20.4.2016 9:30

Spust si program v Debug rezime, a po "zdochnuti" programu by si mal dostat hlasku, preco prg. zdochol;
Tak, ako to popisujes, Ti nikto nepovie nic presne, lebo nepozname Tvoj program.

Takze: <Start Debugging> ... <F5>, pripadne si nastav Breakpoint na riadok alebo aj za riadok, kde Ti to dochne.

Ak budes mat popis chyby, potom Ti tu urcite niekto pomoze.

 
Nahoru Odpovědět
20.4.2016 9:30
Avatar
Odpovídá na Petr Šťastný
Michal Štěpánek:20.4.2016 9:30

Taková rejpavá: Máš tu třídu Hra.cs nastavenou jako "public", že?

Nahoru Odpovědět
20.4.2016 9:30
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Honza
Člen
Avatar
Honza:20.4.2016 9:42

Napiš sem co máš v konstruktoru třídy. Zatím to na mě působí, že tam děláš cosi co způsobuje problém když to uděláš vícekrát než jednou. Je tedy možné že to padání aplikace nesouvisí s vytvořením instance tvé třídy jako takové, ale s tím co se děje v konstruktoru.

Nahoru Odpovědět
20.4.2016 9:42
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Šťastný
vajkuba1234:20.4.2016 9:54
//Tuto tridu chces pouzit v jine tride
    public class Clovek
    {
        private string jmeno;

        public Clovek(string jmeno)
        {
            this.jmeno = jmeno;
        }

        public void Pozdrav()
        {
            Console.WriteLine("Ahoj, ja jsem " + jmeno);
        }
    }

public class Hra
    {
        private Clovek clovek;

        public Hra(Clovek clovek)
        {
            this.clovek = clovek;
        }

        public void PredstaveniLidi()
        {
            clovek.Pozdrav();
        }
    }

public class Program
    {
        static void Main(string[] args)
        {
            Clovek petr = new Clovek("Petr");
            Hra novaHra = new Hra(petr);

            novaHra.PredstaveniLidi();

            Console.ReadKey();
        }
    }
Nahoru Odpovědět
20.4.2016 9:54
No hope, no future, JUST WAR!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na vajkuba1234
vajkuba1234:20.4.2016 9:55

Ale jak radili tady ostatni, bud pouzij debugger a nebo sem prskni tvuj kod...

Nahoru Odpovědět
20.4.2016 9:55
No hope, no future, JUST WAR!
Avatar
Petr Šťastný
Tvůrce
Avatar
Petr Šťastný:20.4.2016 14:58

Jo, už to jede, nějak jsem to opravil :-)

Moc vám všem děkujiiii :D

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
20.4.2016 14:58
Avatar
Nahoru Odpovědět
20.4.2016 15:34
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Šťastný
vajkuba1234:20.4.2016 15:46

V cem byl teda problem?

Nahoru Odpovědět
20.4.2016 15:46
No hope, no future, JUST WAR!
Avatar
Petr Šťastný
Tvůrce
Avatar
Petr Šťastný:20.4.2016 20:07

Prostě jsem tam měl z toho všeho Hra hra = new Hra() atd. cyklus. Tak jsem prostě přepsal všechno kromě Hra.cs tak, aby to nemuselo využívat věci (např. proměnný) z Hra.cs . Ne že bych to přímo vyřešil, ale už to nedělá problém :-)

 
Nahoru Odpovědět
20.4.2016 20:07
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 17 zpráv z 17.