NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Sergej
Neregistrovaný
Avatar
Sergej:19.9.2013 20:29

Dobrý dvečer, ve spolek,
bastlím menší prográmek, teď jsem ale narazil na problém,
ukládám si vytvořené objekty do pole, abych je mohl pěkně předat BGworkeru, problém ale nastal, že nevím jak toto pole nastavit pak zpět do puvodniho stavu tudiž prázdné.

jde o to že jsem línej si to celé přepsat znova a použít třeba object nebo List, a navíc by se mi tato informace či rada hodila i na jiné věci,
tak pokud někdo víte bdu rád když poradíte.

Předem děkuji.

 
Odpovědět
19.9.2013 20:29
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:19.9.2013 20:31

Zkus prosím upřesnit co myslíš tím : nevím jak toto pole nastavit pak zpět do puvodniho stavu tudiž prázdné

 
Nahoru Odpovědět
19.9.2013 20:31
Avatar
Odpovídá na
Michal Žůrek - misaz:19.9.2013 20:33

ano víme, dej si par facek a nebuď líný. Nicméně je fakt že jsem taky takový.

Prostě projedeš celé pole cyklem a nastavíš ho na null nebo Nothing, podle toho jestli píšeš v c# nebo VB.NET. Pak bude prázdné.

 
Nahoru Odpovědět
19.9.2013 20:33
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:19.9.2013 20:46

Vytvoř si to pole znovu.

Nahoru Odpovědět
19.9.2013 20:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Sergej
Neregistrovaný
Avatar
Odpovídá na Michal Žůrek - misaz
Sergej:19.9.2013 20:50

No cyklus jsem zrovna použít nechtěl, ale asi budu muset :D
ono když si dám par facek, tak to s tou leností moc nepomáhá.

object[] poleSobjekty = new object[1000];
public void addObj(object send){
 int i=poleSobjekty.Length();
 poleSobjekty[i]= send;
}
 
Nahoru Odpovědět
19.9.2013 20:50
Avatar
Odpovídá na
Michal Žůrek - misaz:19.9.2013 20:52

tak ještě skus

poleSobjekty = new object[1000];

Jinak proč je tam statických 1000? Co když prvků bude 1001? Dále ty nevíš předem datový typ, že je Object?

 
Nahoru Odpovědět
19.9.2013 20:52
Avatar
Sergej
Neregistrovaný
Avatar
Odpovídá na Michal Žůrek - misaz
Sergej:19.9.2013 21:04

To mě nenapdalo,
statických 1000 je tam proto že jich víc jak 200 asi nebude, ale jen pro jistotu, navíc mám nebo měl jsem že pole se musí definovat přesně.

Datový typ je právě object.
Pole složí jen jako seznam odkazu na dané objekty.

 
Nahoru Odpovědět
19.9.2013 21:04
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:19.9.2013 21:05

Jestli je to dynamické pole, použí List ...

Pozn.: Zbytečně pak alokuješ 800 objektů, které nevyužíváš

Editováno 19.9.2013 21:05
 
Nahoru Odpovědět
19.9.2013 21:05
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:19.9.2013 21:21

"Pole složí jen jako seznam odkazu na dané objekty."

Právě jsi napsal, že je to seznam . Použij tedy kolekci List.

Nahoru Odpovědět
19.9.2013 21:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:19.9.2013 21:24

Typ object se v praxi příliš nepoužívá, programuješ nějakou hloupost.

Nahoru Odpovědět
19.9.2013 21:24
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:19.9.2013 21:29

Třeba ten typ Object chce použít jen jako interface. Pokud jen chce překrýt metodu ToString, tak nic "lepšího" ani nepotřebuje.

Nahoru Odpovědět
19.9.2013 21:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Kit
Jan Vargovský:19.9.2013 21:32

Pochybuju, že člověk co neumí pracovat s Listem ví naco je interface :) (jestli ano, tak se omlouvám, že ti křivdím )

 
Nahoru Odpovědět
19.9.2013 21:32
Avatar
Sergej
Neregistrovaný
Avatar
Odpovídá na David Hartinger
Sergej:19.9.2013 21:32

Typ object se v praxi nepoužívá?
Nevím nejsem programátor, byl bych rád ale mám do tho daleko,
Ale logicky to vyplívá z toho, že dynamicky vytvářím objecty pomocí třídy, které musím někam přiřadit, nebo na ně vytvořit odkaz bych se k nim pak dostal.
poučil bych se,kdyby jsi mi poradil jak vytvářet dynamicky objekty.
nevím jaký má význam jestli použiji string nebo object či int na pole s objecty.

 
Nahoru Odpovědět
19.9.2013 21:32
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:19.9.2013 21:34

Použití typu má význam už jen proto, že programuješ ve staticky typovaném jazyce. Nějak se mi tu nechce vysvětlovat první lekci C#, když tu je napsaná.

Nahoru Odpovědět
19.9.2013 21:34
New kid back on the block with a R.I.P
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:19.9.2013 21:36

V tom případě si založ seznam s typem té třídy a ne obecným typem Object

Nahoru Odpovědět
19.9.2013 21:36
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Kit:19.9.2013 21:46

Například tohle je v C# naprosto korektní:

Object str = "Nazdar";
Console.WriteLine(str);

Object se zde používá jako interface. Ve skutečnosti je v str objekt typu string.

Nahoru Odpovědět
19.9.2013 21:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar

Neregistrovaný
Avatar
:19.9.2013 21:47

No nevím co jsem napsal špatně,
že pracuji ve statciky typovém jazyce vím.
Object chápu jako object (který má svoje methody, a paramtry atd.)
když však potřebuju vytvořit "n" objectu, tak jak mám tomu mám asi přistupovat, když data v objectu jsou smíšená (počty kusu, jejich názvy atp.)

hrrr... trošku jste mě .... , až jsem se hecl a přepasl to vše do objectu.

Ale díky za váš čas.

 
Nahoru Odpovědět
19.9.2013 21:47
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:19.9.2013 21:51

Počet kusů a název objektu jsou přece vlastnosti jednoho objektu. Proč to drobíš? Nebo máš každý kus pojmenovaný zvlášť?

Nahoru Odpovědět
19.9.2013 21:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Sergej
Neregistrovaný
Avatar
Sergej:19.9.2013 22:15

Nevím co je na tomhle špatného.

class objekty
{
    private int cislo { get; set; }
    public int idCard { get; set; }
    public string jmeno { get; set; }
    public string prijmeni { get; set; }
    public string email { get; set; }
    public string slozka { get; set; }
    public string sifrovat()
    {
        /*"code"*/
        string sifra = "sdad";
        return sifra;
    }


        object[] gangstery = new object[100];

        objekty novy = new objekty();
        novy.jmeno = "sdadasd";
        novy.idCard= 123456789;

        gangstery[gangstery.Length + 1] = novy;
 
Nahoru Odpovědět
19.9.2013 22:15
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:19.9.2013 22:18

Řekl bych, že celé je to úplně špatně.

Nahoru Odpovědět
19.9.2013 22:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Sergej
Neregistrovaný
Avatar
Odpovídá na Kit
Sergej:19.9.2013 22:31

Hm.
Dobrá rada, takže hážu C# do koše.
doufám, že myslíte to, že mi tam chybí jedna složená závorka?
Al epřiřazování objectu do pole,
Tak by mě zajímalo jak by jste to teda řešil.
Nebo se běžně řeší, jen já nejsem osvícem touto znalostí.

 
Nahoru Odpovědět
19.9.2013 22:31
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:19.9.2013 22:34

Asi jsem jediný, ale vůbec nechápu co ten kód má dělat.

 
Nahoru Odpovědět
19.9.2013 22:34
Avatar
David Dostal
Tvůrce
Avatar
David Dostal:19.9.2013 22:41
 class Gangster // nebo člověk či co to má být
{
    private int cislo; //není zrovna nejlepší název proměnné
    public int idCard;
    public string jmeno, prijmeni, email, slozka; //případně ještě lépe get; private set;

    public Gangster(string jmeno, int idCard, ...)
    {
          this.jmeno = jmeno ...
    }

    public string Sifrovat()
    {
        string sifra = "sdad";
        return sifra;
    }
}

//předpokládám Main
List<Gangster> gangsteri = new List<Gangster>();
Gangster gangster = new Gangster("sdadasd", 123456789, ...);
gangsteri.Add(gangster);
Editováno 19.9.2013 22:43
 
Nahoru Odpovědět
19.9.2013 22:41
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:19.9.2013 22:45

Ta chybějící závorka je jen prkotina.

Jednak je silně zavádějící název třídy "objekty". Už to svědčí o neznalosti OOP. Třída je třída, objekt je objekt. Kdybys třídu pojmenoval "Gangster" a kolekci (seznam objektů) pojmenoval "gangsteri", byl bych daleko spokojenější.

gangstery[gan­gstery.Length + 1] se odkazuje na neexistující položku pole. Je to chyba. Nemá to však být pole gangsteri, ale seznam gangsteri.

Nikde nevidím konstruktor. Proč neuděláš

Gangster novy = new Gangster("sdadasd", 123456789);
gangsteri.Add(novy);

Bude ti to automaticky udržovat délku, ať jich tam bude 5 nebo 5000.

Nahoru Odpovědět
19.9.2013 22:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Dostal
Kit:19.9.2013 22:48

Koukám, že jsme zcela nezávisle na sobě použili stejné názvy tříd i objektů. Viva OOP.

Nahoru Odpovědět
19.9.2013 22:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Sergej
Neregistrovaný
Avatar
Odpovídá na David Dostal
Sergej:19.9.2013 22:57

Dík.
šlo mi o ten list,
použít na to pole nebylo zrovna moudré, ale nevěděl jsem co jinak.

V případě použití pole místo listu by jste mi asi neporadil?
Nevím co tím totiž myslel sdraco že typ object se v praxi nepoužívá.

http://msdn.microsoft.com/…kkx3h3c.aspx

 
Nahoru Odpovědět
19.9.2013 22:57
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:19.9.2013 23:02

Myslel tím, to, že se v praxi nepoužívá :) Ano, poslal jsi link na manuál, je tam. Co s tím máme dělat? Mohl bych ti tu vysvětlit něco o genericitě a hierarchii tříd, možná trochu rozhraní. Ale stejně by jsi to teď nepochopil. Začni hezky od začátku místním seriálem o OOP.

Nahoru Odpovědět
19.9.2013 23:02
New kid back on the block with a R.I.P
Avatar
David Dostal
Tvůrce
Avatar
David Dostal:19.9.2013 23:06
Gangster[] gangsteri

(pole gangsterů)
Problém se statickou velikostí by ovšem zůstal a tudíž to není nejlepší řešení.

Editováno 19.9.2013 23:09
 
Nahoru Odpovědět
19.9.2013 23:06
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:19.9.2013 23:40

Objekt se používá na boxing a unboxing (viz třeba serial tady o OOP), typ objekt ti vrací každý eventhandler z knihoven, abys mohl zjistit co kdo ten event vyvolal (třeba). Využití je mnoho. Sdraco tím myslel, že se nepoužívá takhle přímo, že bys ho používal ty a psal ho přímo. Vždy by jsi měl vědět, co za objekt ti přijde a podle toho se zachovat.

Proč chceš pořád používat pole ? Toto je jasný příklad, kdy nevíš kolik jich tam bude a musíš s velikostí dynamicky pohybovat = je to list

 
Nahoru Odpovědět
19.9.2013 23:40
Avatar
Sergej
Neregistrovaný
Avatar
Odpovídá na Jan Vargovský
Sergej:19.9.2013 23:50

Mockrát děkuji za vysvětlení.
už jsem to přepsal,
pole již používat nechci, o listu jsem nevěděl, moje chyba, s C# začínám OOP znám z jiného jazyka.
Krom toho vím že pole nebude mít víc jak 200-max 300 (1000 jsem tam dal jen tak od boku, přiznávám).

 
Nahoru Odpovědět
19.9.2013 23:50
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jan Vargovský
David Hartinger:20.9.2013 9:01

Ani boxing a unboxing se příliš nedělá, je to spíše teoretická záležitost. C# má nullovatelné typy, dělá ho na pozadí.

Editováno 20.9.2013 9:01
Nahoru Odpovědět
20.9.2013 9:01
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:20.9.2013 9:02

Kdybys znal OOP z jiného jazyka, tak bys nepojmenoval třídu objekty a nesnažil se použít pole místo seznamu. To jsou úplné základy.

Nahoru Odpovědět
20.9.2013 9:02
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Luboš Běhounek Satik:20.9.2013 9:38

Ale jo, boxing občas člověk využije, já ho teď používám třeba u extensions ke třídě Stream - mám funkci write, které předhodím object a ona uvnitř zjistí, co je to za typ (string, int, datetime, byte[], ...) a podle toho zapíše.

Nahoru Odpovědět
20.9.2013 9:38
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:20.9.2013 9:53

V OOP se tohle přece děje zcela automaticky. O to se vůbec starat nemusím.

Nahoru Odpovědět
20.9.2013 9:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:20.9.2013 9:57

Nemusíš, ale je dobré o tom vědět, boxing/unboxing má režii, pamatuju si, že v nějakých DirectX ukázkách běžela managed verze asi o 50% pomaleji než unmanaged právě kvůli boxingu, kterému se dalo vyhnout.
Navíc to generovalo každou sekundu navíc několik desítek-stovek MB nepořádku pro GC.

Nahoru Odpovědět
20.9.2013 9:57
https://www.facebook.com/peasantsandcastles/
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Luboš Běhounek Satik
David Hartinger:20.9.2013 9:57

Většinou mají spíše oddělené metody, jako WriteInt, WriteString a podobně. Má to tak .NET řeba na třídě XmlWriter. Ten object je totiž docela zavádějící, v .NET jsem ho viděl jen ve starých kolekcích před genericitou.

Nahoru Odpovědět
20.9.2013 9:57
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Luboš Běhounek Satik:20.9.2013 9:59

To tam mám taky, ale kvůli pohodlí jsem si ještě napsat obecnou write, která je volá automaticky a když narazí na něco co nezná, tak vyhodí výjimku. Dokonce můžu zavolat stream.WriteA­ll(nejakyInt, nejakyString, nejakeBajtovePole, nejakyDateTime, nejakyFloat, nejakyInt, nejakyInt) a ono mi to všechny v uvedeném pořadí zapíše.

Nahoru Odpovědět
20.9.2013 9:59
https://www.facebook.com/peasantsandcastles/
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Luboš Běhounek Satik
David Hartinger:20.9.2013 10:11

Teoreticky se to tady hodí. Prakticky si stejně nějak neumím představit kde bych to použil. Soubory mají většinou nějakou pevnou strukturu, ne že to do nich sypu :P Leda že by to byly binárky.

Nahoru Odpovědět
20.9.2013 10:11
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Luboš Běhounek Satik:20.9.2013 10:25

Jj, mapy do Volfijroku máme uložené binárně :)

Nahoru Odpovědět
20.9.2013 10:25
https://www.facebook.com/peasantsandcastles/
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 39 zpráv z 39.