Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

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

C# .NET .NET (C# a Visual Basic) Odkazování na jednu třídu vícekrát American English version English version

Aktivity (1)
Avatar
Petr Stastny
Redaktor
Avatar
Petr Stastny: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 Stastny
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 Stastny
Redaktor
Avatar
Odpovídá na Michal Štěpánek
Petr Stastny: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 Stastny
Redaktor
Avatar
Odpovídá na Petr Stastny
Petr Stastny: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 Stastny
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 Stastny
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! For world peace Israel must be DESTROYED!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Stastny
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! For world peace Israel must be DESTROYED!
Avatar
Petr Stastny
Redaktor
Avatar
Odpovídá na vajkuba1234
Petr Stastny: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 Stastny
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 Stastny
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! For world peace Israel must be DESTROYED!
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! For world peace Israel must be DESTROYED!
Avatar
Petr Stastny
Redaktor
Avatar
Petr Stastny: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  +1 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 Stastny
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! For world peace Israel must be DESTROYED!
Avatar
Petr Stastny
Redaktor
Avatar
Petr Stastny: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.