Diskuze: Mazání Pole objektu

C# .NET .NET (C# a Visual Basic) Mazání Pole objektu American English version English version

Avatar
Sergej
Neregistrovaný
Avatar
Sergej:

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ý
Redaktor
Avatar
Odpovídá na Sergej
Jan Vargovský:

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 Sergej
Michal Žůrek (misaz):

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  -1 19.9.2013 20:33
Nesnáším {}, proto se jim vyhýbám.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Sergej
Kit:

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:

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 Sergej
Michal Žůrek (misaz):

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
Nesnáším {}, proto se jim vyhýbám.
Avatar
Sergej
Neregistrovaný
Avatar
Odpovídá na Michal Žůrek (misaz)
Sergej:

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ý
Redaktor
Avatar
Odpovídá na Sergej
Jan Vargovský:

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
Redaktor
Avatar
Odpovídá na Sergej
Kit:

"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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Sergej
David Čápka:

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

Nahoru Odpovědět 19.9.2013 21:24
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

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ý
Redaktor
Avatar
Odpovídá na Kit
Jan Vargovský:

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 Čápka
Sergej:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Sergej
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Sergej
Petr Nymsa:

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
Redaktor
Avatar
Odpovídá na Jan Vargovský
Kit:

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
:

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
Redaktor
Avatar
Odpovídá na Sergej
Kit:

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:

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
Redaktor
Avatar
Odpovídá na Sergej
Kit:

Ř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:

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ý
Redaktor
Avatar
Odpovídá na Sergej
Jan Vargovský:

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
Redaktor
Avatar
David Dostal:
 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  +1 19.9.2013 22:41
Avatar
Kit
Redaktor
Avatar
Odpovídá na Sergej
Kit:

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  +1 19.9.2013 22:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Dostal
Kit:

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

Nahoru Odpovědět  +2 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:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Sergej
David Čápka:

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  +1 19.9.2013 23:02
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Dostal
Redaktor
Avatar
David Dostal:
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ý
Redaktor
Avatar
Odpovídá na Sergej
Jan Vargovský:

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:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Vargovský
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Sergej
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Luboš Běhounek (Satik):

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
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

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):

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
:)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Luboš Běhounek (Satik)
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Luboš Běhounek (Satik):

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
:)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Luboš Běhounek (Satik)
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Luboš Běhounek (Satik):

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

Nahoru Odpovědět 20.9.2013 10:25
:)
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.