Diskuze: Instance Objektu

C# .NET .NET (C# a Visual Basic) Instance Objektu American English version English version

Avatar
Jakub Lásko[Saarix]:

Zdravám mám problém u TextBoxu s instancí objektu. Používám následujicí kód. Při vytváření konstruktoru třídy.

private TextBox textBox;

        public Arena(Bojovnik hrac, Bojovnik nepritel, Kostka kostka, TextBox textBox)
        {
            this.hrac = hrac;
            this.nepritel = nepritel;
            this.kostka = kostka;
            this.textBox = textBox;
        }

Takto je vytvoření nové instance třídy.

public frmArena()
        {
            InitializeComponent();
            arena = new Arena(hrac, bojovnik, new Kostka(), tbxBoj);

            arena.Boj();
        }

A kód kde chci zapsat to textBoxu. Jako metoda Třídy Arena.

textBox.Text += String.Format.....

Prostý kód, ale vyhodí to error že odkaz na objekt není nastaven na instanci objektu. Ale já to chápu tak že když mám komponentu textBox ve formu, tak se uvnitř formu při inicializaci normálně instance vytvoří, takže do konstruktoru třídy předávám odkaz na instanci objektu TextBox. Tím pádem bych v tom neviděl problém.

Editováno 29.8.2013 10:20
Odpovědět 29.8.2013 10:19
Časem je vše možné.
Avatar
Nahoru Odpovědět 29.8.2013 10:26
Nesnáším {}, proto se jim vyhýbám.
Avatar
Nahoru Odpovědět 29.8.2013 10:38
Časem je vše možné.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jakub Lásko[Saarix]
Kit:

Pošli přímo sem odkaz, ať se na to můžeme podívat všichni.

Nahoru Odpovědět 29.8.2013 10:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Nahoru Odpovědět 29.8.2013 10:42
Časem je vše možné.
Avatar
Jakub Lásko[Saarix]:

Omlouvám se za kvalitu kódu, ale dělám to pro zlepšení znalostí v OOP a jeho zažití. Projekt je trochu rozdělaný...

Nahoru Odpovědět 29.8.2013 10:44
Časem je vše možné.
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Jakub Lásko[Saarix]
Theodor Johnson:

Chybí ti tam instance Bojovníka hrac

// Edit: i nepřítele

Editováno 29.8.2013 10:51
Nahoru Odpovědět 29.8.2013 10:48
Přecházím na "Cross-Platform Development"
Avatar
Jakub Lásko[Saarix]:

Intance hráče se vytvoří v prvním formu

private void btnChoose_Click(object sender, EventArgs e)
        {
            if (rdbRytir.Checked == true)
                hrac = new Bojovnik("James", 1, 500, 20, 5, 20, 10, 10, 10, 10, new Kostka());
            if (rdbLovec.Checked == true)
                hrac = new Bojovnik("James", 1, 300, 25, 2, 10, 20, 10, 10, 10, new Kostka());

            frmGame game = new frmGame();
            game.hrac = hrac;
            game.ShowDialog();
        }

A pak se předá do hry.

Nahoru Odpovědět 29.8.2013 10:53
Časem je vše možné.
Avatar
Odpovídá na Jakub Lásko[Saarix]
Michael Olšavský:

Vůbec neinicializuješ žádný objekt :O :D Nejen v téhle frmArena ale třeba i frmGame. Nemůžeš pracovat s nevytvořeným objektem.

EDIT:
Tak tohle je dost hnusný kód. Kdo se v tom má vyznat? A kde nastavuješ nepřítele a textbox?

Editováno 29.8.2013 10:55
 
Nahoru Odpovědět 29.8.2013 10:53
Avatar
Odpovídá na Theodor Johnson
Jakub Lásko[Saarix]:

Promiň už vidím, kde je chyba jsem si spletl instanci.

Nahoru Odpovědět 29.8.2013 10:55
Časem je vše možné.
Avatar
Odpovídá na Jakub Lásko[Saarix]
Michal Žůrek (misaz):

textBox v konstruktoru formuláře neexistuje, musíš ho zavolat z load.

Přečti si zdejší tutorialy o OOP a pak teprve přejdi k formulářům.

Nahoru Odpovědět 29.8.2013 10:55
Nesnáším {}, proto se jim vyhýbám.
Avatar
Theodor Johnson
Redaktor
Avatar
Theodor Johnson:

Objekt musíš nejprve inicializovat, místo 'Bojovnik hrac;' třeba

public Bojovnik hrac = new Bojovnik("jmeno", 1, 100, 10, 1, 10, 10, 10, 10, 10, new Kostka(6));

ve frmArena předáváš prázdný objekt

Nahoru Odpovědět 29.8.2013 10:55
Přecházím na "Cross-Platform Development"
Avatar
Odpovídá na Jakub Lásko[Saarix]
Michael Olšavský:

Takhle to vážně nedělej. Nikdo se v tom nevyzná a je to proti zásadám OOP.

 
Nahoru Odpovědět 29.8.2013 10:56
Avatar
Odpovídá na Michael Olšavský
Jakub Lásko[Saarix]:

Koukám že to tu mám trochu nepřehledné a špatně. Takže bude lepší to předělat a udělám to radši skrze konzoli.

Nahoru Odpovědět 29.8.2013 10:59
Časem je vše možné.
Avatar
Odpovídá na Jakub Lásko[Saarix]
Michal Žůrek (misaz):

ne, nedělej nic. Přečti si tutoriály pak teprv něco programuj.

Nahoru Odpovědět  +1 29.8.2013 11:01
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Jakub Lásko[Saarix]
Michael Olšavský:

K formům se vrať až poté, co si projdeš události, delegáty, dědičnost, vlastnosti a polymorfismus. Také si zkus nejdříve udělat správný návrh. A používej konstruktory. Správně by jsi měl co nejméně zasahovat z objektu do objektu, zvlástě pokud nemají žádnou vazbu. Veřejné proměnné jsou tedy špatné řešení.

Editováno 29.8.2013 11:04
 
Nahoru Odpovědět  -1 29.8.2013 11:04
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 16 zpráv z 16.