Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# - štruktúra v halde?

Mám takýto nedostatok v C#:
Napr. DateTime je definované ako štruktúra a niečo iné ako trieda. V Pascale to fungovalo tak, že ak bola štruktúra, tak pamäť bola pridelená automaticky, ak trieda, tak sa muselo vytvárať miesto v pamäti. V C# sa ale aj pri štruktúre používa new, prečo?

DateTime dt = new DateTime(2000, 1, 1);
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Ked to pouzijes ako lokalnu premmenu je to v stacku (struktura alebo trieda to je uplne jedno, vo vs…
MM.. 25.05.2009 01:30
MM..
[noflame]to MM.. : mňa dementný C# v celku dobre živý a urobil som v ňom pár veľmi dobrých projektov…
Len tak 25.05.2009 07:54
Len tak
OMG, OMG. Jo, robte v tej sracke, je to super (ako prave vidime ani sam autor nevie jak ten jeho vyt…
MM.. 25.05.2009 14:13
MM..
Na úvod len toľko, že v C# programujem súkromne, s prácou to nič nemá, takže sa črepov báť nemusíš.:…
msx. 25.05.2009 16:36
msx.
Doplnené: To, že C# nie je vhodná na pár projektov, neznamená, že na iné projekty je nevýhodné. Každ…
msx. 25.05.2009 16:45
msx.
Nemusis kontrolovat ziadne dealokovanie. To je prave to ze ked clovek nevie, tak utecie k C# :) P.S…
MM.. 25.05.2009 16:49
MM..
Nerozumieš celkom. Tým kontrolovaním som myslel to, že musíš napísať x.Dispose();. V prípade, že sa…
msx. 25.05.2009 16:56
msx.
Nemusis ptz standardne new je riesene tak ze pri nedostatku RAM program skonci (tusim ze vtedy ked n…
MM.. 25.05.2009 17:03
MM..
V čom všetkom vlastne programuješ? A v čom si programoval kedysi? Pýtam sa to preto, lebo mne ani ta…
msx. 27.05.2009 10:54
msx.
Nespravne otazky. Programoval som od asm Z80,8051,x86 cez basic, pascal, c/c++ (std, WinAPI, MFC), p… poslední
MM.. 27.05.2009 14:40
MM..

Ked to pouzijes ako lokalnu premmenu je to v stacku (struktura alebo trieda to je uplne jedno, vo vsetkych jazykoch, nic sa neprideluje z heapu nikdy automaticky). Ked to chces dynamicky tak musis alokovat pamat (= new). ... tak to je v C++ a urcite aj v C# (nechce sa mi to hladat v MSDN)
P.S. je mozne ze v dementnom C# nejde definovat zlozitejsie typy v stacku. Ptz ak dementne C# nema extra syntax pre pointre tak objekty su vzdy pointre (a teda nedaju sa alokovat ako hodnota v stacku). Ked chces robit v C# tak pouzivaj MSDN, tam mas vsetko napisane. Nikomu sa to nechce hladat v MSDN za teba. To sa chces pytat na kazdu takuto chu***u? To bude potom cela poradna len tvoje dotazy :)

OMG, OMG. Jo, robte v tej sracke, je to super (ako prave vidime ani sam autor nevie jak ten jeho vytvor funguje cim sa vytvara nebezpecie napr. toho ze neosetri excepsny apod kedze ani sam nevie ze co jeho kod robi a ake problemy pri tom mozu nastat). Chudak zakaznici. Dufam ze tie vase crepy nebudem musiet nikdy pouzit.

P.S. a v zivi ma byt makke i na konci. A to ze niekohozivi sracka nie je nic vynimocne, napr. MS zivi sracka uz 20rokov, vyrobcov trabanov zivil trabant, atd.

Na úvod len toľko, že v C# programujem súkromne, s prácou to nič nemá, takže sa črepov báť nemusíš.:!:

Sám autor vie ako to funguje, len nerozumel tomu new. Myslel, že new je len pre vytváranie v halde. Nevedel, že new je pre volanie konštruktora. Láskavo si nechaj pre seba nadávanie na C#. Za to, že tebe nevyhovuje, nemusí to platiť aj o ostatných. Akože neberiem ti tvoj názor, ale je to podobné ako keby sa niekto pýtal niečo na Windows a niekto mu na to odpovie, že Windows je dementný, nemá zmysel ho používať. Ide o to, že takéto narážky riešenie na otázku nepomôžu nájsť. Ak máš na C# názor aký máš a chceš ho prezentovať, skús to vhodnejšou formou, napíš článok a popíš, čo je na ňom horšie ako na C++ a podobne. Myslím, že nielen ja, ale viacerí taký článok ocenia. Mne C# vyhovuje práve preto, lebo mi už liezlo krkom večné dealokovanie pamäti a myslieť stále na to, že či je pamäť uvoľnená správne. C# sa o to postará samé. Kedysi dávno som prvýkrát v živote robil v Turbo Vision (kto nevie o čo ide, je to objektová knižnica na používanie vizuálnych komponent na spôsob Windows, ale v textovom móde (existuje aj Graphic Vision pracujúce aj s grafikou a od Windows sa už veľmi nelíši) pre Turbo Pascal pod DOS) program na ukladanie nazvem to kartotéky pesničiek čo som mal na kazetách. Šľapalo to to perfektne až na to, že po pár hľadaniach mi to zmrzlo, lebo som niekde zrejme neuvolnil pamäť. Pracoval som totiž s haldou. Odvtedy mám k tomu odpor a aj keď často so smerníkmi robím, presnejšie s objektami (Delphi, to síce nie sú smerníky v pravom zmysle slova, ale význam je rovnaký), tak to vždy bolo s odporom. Ale nepomohol som si, musel som ich použiť. Pri C# je aspoň o starosť menej. Miesto kritiky môjho príspevku radšej začni uvažovať nad obsahom článku. Rád by som si tvoj názor a porovnanie čo ti na C# nesedí prečítal. Bude to iste zaujímavé čítanie.

Doplnené:
To, že C# nie je vhodná na pár projektov, neznamená, že na iné projekty je nevýhodné. Každý jazyk je viacmenej na niečo vhodnejší, resp. nevhodnejší. Ak nepracujem čast s haldou, len občas niečo v nej vytvorím a potom nepotrebujem, tak nevidím dôvod, prečo nepoužíť radšej C# a ušetriť tak čas na kontrolu dealokovania haldy. C++ je pre zmenu vhodnejšie tam, kde treba rýchlosť. Rýchlosťou bude C# určite zaostávať. Je určite rozdiel aritmetika veľkých čísel a jednoduchá kartotéka napr.. Ale myslím, že to píšem zbytočne, lebo robím v dementnom jazyku a samé črepy, ktoré ty nechceš ani vidieť. Škoda času stráveného nad písaním tohto príspevku. A okrem toho je to aj tak OT.

Nemusis kontrolovat ziadne dealokovanie. To je prave to ze ked clovek nevie, tak utecie k C# :)

P.S. Ale ok sak kludne to pouzivaj, mne je to fuk, urcite po tebe nechcem aby si siel studovat 5rokov SW vyvoj kvoli tomu aby si si nieco male pre seba naprogramoval. Ze je C# dementne je moj nazor a mam na neho dovody, a snad mozem vyjadrit svoj nazor, skor ma zaraza ze sa tem hore ozyva niekto kto sa tym zivi a este je na to hrdy.

Nerozumieš celkom. Tým kontrolovaním som myslel to, že musíš napísať x.Dispose();. V prípade, že sa ti vetví program trochu viac, tak potom kvôli Dispose() máš aj viac blokov try a podobne. To som tým myslel.

Ak povedzme, že alokuješ x1 a x2, pamäť ti môže pretiecť práve pri x2, takže x1 uvoľniť musíš, ale x2 nie, lebo by došlo k chybe. Čiže, ak chceš urobiť úplne čistý program C++, ktorý uvoľní skutočne len to čo treba, tak za každým new môžeš dávať blok try.

Nemusis ptz standardne new je riesene tak ze pri nedostatku RAM program skonci (tusim ze vtedy ked neni odchytena exception, a exceptiony mozes chytat aj v nadradenej funkcii). A ked skonci program tak OS uvolni vsetko co alokoval.

A keby si mal slusne rieseny destruktor objektu tak ten dealokuje vsetko co bolo alokovane. Napr.
cDynamickeMemory class {
void *ptr;
UINT allocated;
atd
}
... konstruktor nastavi ptr=NULL, nejaka metoda alokuje apod, a destruktor
~cDynamickeMemory() {
if(ptr)
free(ptr);
}

Kedykolvek urobis return z funkcie tak sa volaju destruktory vsetkych lokalnych premennych (vcetne takychto objektov) a uvolni sa len to co bolo naalokovane. Vobec sa nemusis starat o dealokaciu a robis return z funkcie kedykolvek a vsetko bude korektne.
Alebo ak fcie pouzivaju new namiesto malloc tak namiesto free bude delete.

Moznosti ako riesit dynamicku pamat je miliarda, len si treba spravne navrhnut objekty alebo pouzit napr. MFC kniznicu apod.
P.S: takyto objekt sa da predavat aj medzi funkciami a aj ako navratova hodnota fcie, priklad napr. MFC CString...

V čom všetkom vlastne programuješ? A v čom si programoval kedysi? Pýtam sa to preto, lebo mne ani tak nejde o prechod na C# ako skôr o to, rozšíriť si obzory v programovaní. Kedysi som začal v BASICu, neskôr to bol Pascal, potom som skúsil niečo napísať aj v C. Dosť dlho robím v Delphi, neskôr som sa dostal k PHP a teraz chcem trochu spoznať aj C#. Nevidím nič zlé na tom, že ma to zaujíma. Ešte mi ostáva skúsiť Javu. Ku všetkému sa chcem dostať postupne. Ide mi o to, že nechcem byť večne na jednom jazyku a nič iné nepoznať. Chcem poznať kvality a nekvality každého rozšíreného jazyka a programovať hlavne v tom, kde sa mi budse robiť najlepšie. Jazyky sa najlepšie učia tak, že človek nič nevie a je nútený niečo naprogramovať. Vtedy sa dá veľa naučiť najrýchlejšie.

Nespravne otazky. Programoval som od asm Z80,8051,x86 cez basic, pascal, c/c++ (std, WinAPI, MFC), php, javascript, trochu velmi malo javu, az po perl, LISP a ine sialenstva :), a je uplne jedno v com nieco pisem, ked si vymyslis nejaky novy jazyk tak po par hodinach studia mozem pisat v nom (to je v praxi uplne bezne ze sa dostanes k niecomu kde je uz zadefinovanych milion makier a nejake proprietarne jadro-kniznica a tym mas z toho uplne iny "jazyk"). A hlavne otazka ma zniet inac - ci clovek uz robil napr. s WinAPI alebo ake kniznice (MFC, ATL, atd), alebo nejake proprietarne alebo specializovane kniznice v zavislosti od problemu ktory chce clovek riesit, co vsetko uz riesil, ci vie robit s datovymi typmi ako napr. dynamicke zoznamy apod, ci vie robit s DB a ako, sietou, ci vie urobit regulator, furierovu transformaciu, kryptovanie, umelu inteligenciu, napr. neuronove siete, analyzu obrazu, zvuku, 3D engine (premietanie, prepocty, fyzika pohybu, apod), multithreading (mutexy atd), platformy win/linux/unix, atd., atd.
Samotny jazyk je nepodstatna trivialita, dolezite je to ze kde je potrebne vysledok pouzit (podla poziadaviek), v com nejake vyvojove prostredie/jazyk obmedzuje, a v com poskytuje vyhody. Vyvojove prostredie/jazyk je len nastroj ako napr. srubovak, nepovies ze "Chcem poznať kvality a nekvality každého rozšíreného srubovaku a robit hlavne s tym, s ktorym sa mi bude robiť najlepšie" ale ked skusa tak preto aby vedel ze ktory sa hodi na co. Na opravu hodiniek pouzijem iny ako na opravu auta a tam kde treba imbus pouzijem imbus atd. Su nastroje ktore umoznuju vela roznych veci, ale treba s tym vediet zaobchadzat, a su nastroje ktore sice napr. ulahcuju robotu (velky srubovak s akumulatorom) ale nedostanes sa s nim do rohu apod (su obmedzene). Tolko k paralele.

Ano, je dobre si skusit pracu s roznymi "srubovakmi" :), ja nemam nic proti tomu ze si skusas (prave naopak, ano, skusaj) a ani som ti nikde nezakazoval robit v C#, napisal som len svoj nazor ze C# "je dementny" (cim som narazal na pre mna "dementne" obmedzenia ktore to ma), kludne si skusaj. A pozitivne je aj to ze sa pytas "preco to tak je". Odpoved je v tom MSDN, alebo ak ti tam to nestaci tak odpoved na otazku "preco" u tohto pripadu je uz len: lebo to MS tak zadefinoval a tak to urobil vo frameworku, tak to tak je.

Zpět do poradny Odpovědět na původní otázku Nahoru