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.
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.
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.
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á.
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Neregistrovaný
: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.
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í.
class Gangster // nebo člověk či co to má být
{
privateint cislo; //není zrovna nejlepší název proměnnépublicint idCard;
publicstring jmeno, prijmeni, email, slozka; //případně ještě lépe get; private set;public Gangster(string jmeno, int idCard, ...)
{
this.jmeno = jmeno ...
}
publicstring 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);
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[gangstery.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.
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.
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
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).
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.
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.
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.
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.WriteAll(nejakyInt, nejakyString,
nejakeBajtovePole, nejakyDateTime, nejakyFloat, nejakyInt, nejakyInt) a ono mi
to všechny v uvedeném pořadí zapíše.
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 Leda že by
to byly binárky.
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.