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

Avatar
Petr Stastny
Redaktor
Avatar
Petr Stastny:

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. dubna 19:36
Avatar
Odpovídá na Petr Stastny
Michal Štěpánek:

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. dubna 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:

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

Hra hra = new Hra();
 
Nahoru Odpovědět 19. dubna 20:02
Avatar
Petr Stastny
Redaktor
Avatar
Odpovídá na Petr Stastny
Petr Stastny:

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. dubna 20:05
Avatar
Odpovídá na Petr Stastny
Michal Štěpánek:

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. dubna 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:

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

Nahoru Odpovědět 19. dubna 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:

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

Nahoru Odpovědět 19. dubna 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:

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. dubna 8:34
Avatar
LacoS.
Člen
Avatar
LacoS.:

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. dubna 9:30
Avatar
Odpovídá na Petr Stastny
Michal Štěpánek:

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

Nahoru Odpovědět 20. dubna 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:

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. dubna 9:42
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Petr Stastny
vajkuba1234:
//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. dubna 9:54
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na vajkuba1234
vajkuba1234:

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

Nahoru Odpovědět 20. dubna 9:55
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Petr Stastny
Redaktor
Avatar
Petr Stastny:

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. dubna 14:58
Avatar
Nahoru Odpovědět  +1 20. dubna 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
Nahoru Odpovědět 20. dubna 15:46
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Petr Stastny
Redaktor
Avatar
Petr Stastny:

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. dubna 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.