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);
Předmět Autor Datum
Tusim ze struktury uz od jazyka C se podobaji tridam (byt jsou omezene v moznostech). V jazycich C,C…
Flash_Gordon 24.05.2009 21:57
Flash_Gordon
Krásne to máš vysvetlené od Tomáša : http://blog.aspnet.sk/tomas/archive/2007/07/01/Hod notove-a-ref…
Len tak 24.05.2009 22:06
Len tak
Hodnotové typy nevyžadujú inštancovanie/inicializovanie cez operátor new, aj keď je možný i takýto z…
msx. 25.05.2009 00:11
msx.
Pokud provádíš inicializaci pomocí konstruktoru, tak new použít musíš.
Wikan 25.05.2009 08:08
Wikan
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
To víš, to jsou ti nativní teapckové, kteří milují hvězdičku za názvem proměnné a instrukci MOV...:-…
MaSo 25.05.2009 08:26
MaSo
Nejde o milovanie ale o to aky vysledok z tej sracky vypadne. Skus si urobit hru alebo ovladac v C#.…
MM.. 25.05.2009 14:32
MM..
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..
to MM..: takých ľudí ako si ty, ja nemusím. Nebudem sa vyjadrovať k tvojmu názoru, myslím že to sved…
Len tak 25.05.2009 14:34
Len tak
A ja zas nemusim takych co urobia "projekt" typu 4okienka a posli to niekam a si myslia ze jaki su m…
MM.. 25.05.2009 14:47
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.
Ked pouzijes v C++ nejaku slusn triedu na dynamicku pamat (kniznic je kopec alebo urobit si taky vla…
MM.. 25.05.2009 16:43
MM..
Ešteraz opakujem, že rozdiel medzi štruktúrou a triedou rozumiem. Akurát, že mi nešlo do hlavy do ne…
msx. 25.05.2009 16:48
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..
K tomu čo si doplnil: Názor si napísať môžeš, ale dá sa to podať aj user-friendly. Konkrétne v mojom…
msx. 25.05.2009 16:59
msx.
Ved vpohode kludne to pouzivaj, ano je to trochu bezpecnejsie. Hlavne pouzivat to MSDN (to neber ako…
MM.. 25.05.2009 17:21
MM..
Lenže tam je to popísané štýlom toto je takto a toto takto. Ja som len chcel vedieť prečo je to tak.…
msx. 25.05.2009 20:54
msx.
C# určite dementné nie je. A ten zápis mám práve z MSDN.
msx. 25.05.2009 08:15
msx.
v C# je struktura vzdy hodnotovy typ, new sposobi len vyvolanie konstruktora, nedochadza k ziadnej a…
mkmt 25.05.2009 07:02
mkmt
konstruktor u struktury? LOL. Struktura s konstruktorom uz nie je struktura ale trieda. C# bere evid…
MM.. 25.05.2009 14:24
MM..
ja viem, ze vzdy vies vsetko najlepsie :-D ale v tomto pripade sa mylis: Like classes, structs are…
mkmt 25.05.2009 14:31
mkmt
Trochu som to zeditoval som si to pozrel v MSDN, evidentne bere C# vsetko ako objekty (vsetko ma kon…
MM.. 25.05.2009 14:51
MM..
tym padom klasicka struktura v C# neexistuje to je vec pohladu, dotazovatel mal problem s konstrukt…
mkmt 25.05.2009 15:05
mkmt
tak, tak, spravne pises ;) Vsetko je aj napisane v MSDN, ako som pisal hned na zaciatku :) Najdene s…
MM.. 25.05.2009 15:18
MM..
Konštruktor v štruktúre môže byť aj v dementnom C++. V dementnom C++ je každá štruktúra trieda, takž…
los 25.05.2009 15:36
los
Jezis maria ale aj v C++ mozes mat strukturu bez konstruktora. A alokovat ju bez new. Mozes alokovat…
MM.. 25.05.2009 15:56
MM..
Jezis maria ale aj v C++ mozes mat strukturu bez konstruktora. A alokovat ju bez new. to mozes aj…
mkmt 25.05.2009 16:00
mkmt
No tak prezrad dotazovatelovi ze ako.
MM.. 25.05.2009 16:02
MM..
on sa nepytal na strukturu bez, konstruktora hovoril o built-in strukture, ktora vyzaduje pouzitie k…
mkmt 25.05.2009 16:13
mkmt
Furt tam mas default konstruktor a furt je to objekt. OK zrovna strukturu MS-inzinieri dali do stack…
MM.. 25.05.2009 16:19
MM..
otazka sa tykala konkretne struktury, myslim ze, akekolvek filozofovanie o vyhodach ci nevyhodach C+…
mkmt 25.05.2009 16:33
mkmt
Diskutovat o vyhodach sa zacalo vyssie, ja som nezacal (len som ten crep prislusne zhodnotil). Alebo…
MM.. 25.05.2009 16:38
MM..
Jednoducho: dt.Day = 1; atď. Akurát, že Day je len na čítanie. Keby bol možný zápis, tak sa to dá ak…
msx. 25.05.2009 16:51
msx.
To co teraz pises :) Ja som pisal o alokacii objektu a nie o priradovani hodnot clenom.
MM.. 25.05.2009 16:57
MM..
Tak tomu říkám fight! Každá třída v C# je odvozena od třídy (objektu) SystemObject (nebo tak nějak).…
Flash_Gordon 25.05.2009 16:01
Flash_Gordon
Nie, v C++ nemôžeš mať všetko - napr. reflexiu (nie, dementné RTTI nie je reflexia) alebo generiká (…
los 25.05.2009 19:56
los
To su prave veci ktore slusny program bud nepotrebuje alebo by mat nemal :) Ano rychlejsie nieco nap…
MM.. 25.05.2009 20:09
MM..
Hmm, slušný program nepotrebuje generické triedy? Hmm... Nechápem, prečo sa tvoja averzia neprejavu…
los 25.05.2009 20:16
los
Stretavam sa neustale, ale aspon nejake percento takych odradi uz syntax C(++) :-) Nejde len o hnoj…
MM.. 25.05.2009 20:20
MM..
.. co sa tyka generickych classov (moj sukromny nazor:) zvycajne sa da navrhnut objektovy model tak…
MM.. 25.05.2009 20:42
MM..
Omyl. Konštruktor u štruktúry slúži na inicializáciu.
msx. 25.05.2009 20:55
msx.
to msx. : niekedy je dobré kúpiť (zainvestovať) drahšiu knižku, máš tam všetko vysvetlené prečo, ako…
Len tak 25.05.2009 07:56
Len tak
Knižku mám, dokonca celkom dobrú. Len mi nešlo do hlavy to new.
msx. 25.05.2009 08:16
msx.
To som nevedel - sorry, ale doporučujem aj tak čítať aspnet.sk alebo aspnet.cz poprípade vyvojari.cz…
Len tak 25.05.2009 08:41
Len tak
Šak aj Internet dosť pozerám. Včera som objavil napríklad kvalitnú českú stránku www.builder.cz.
msx. 25.05.2009 20:56
msx.
Pri štruktúrach nemusíš používať operátor new - pokiaľ uvedieš/naplníš hodnoty skôr ako ich použiješ…
noname 26.05.2009 22:28
noname
Ked to ma konstruktor tak je to nejaky objekt. P.S. a aj v tom tvojom zapise sa vola default konstru…
MM.. 27.05.2009 00:30
MM..
Este ze java nema struktury... ako tak citam, tu je ina vymena nazorov...
Intex 27.05.2009 13:04
Intex

Tusim ze struktury uz od jazyka C se podobaji tridam (byt jsou omezene v moznostech). V jazycich C,C++ a C# se pouziva k vytvareni instanci trid a struktur operator new.
Co jsem se docetl ja, tak struktury je vyhodne pouzivat v pripadech, kdy se jedna hlavne o nositele udaju (ve smyslu pameti-udaju).
V takovem pripade by pouziti struktur melo mit lepsi dopad na vykon.

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.

A ja zas nemusim takych co urobia "projekt" typu 4okienka a posli to niekam a si myslia ze jaki su machri. Skus si tam urobit napr. optimalizovanu aritmetiku s velkymi cislami, kvoli jednej aritmetickej operacii vytvoris milion substringov, framework zavola milionkrat malloc a garbage collector sa z toho pos*** :) Ano C# je krasne.
Na klient server pouzije vacsina radsej javu aby to bolo aspon zdialky multiplatformove.

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.

Ked pouzijes v C++ nejaku slusn triedu na dynamicku pamat (kniznic je kopec alebo urobit si taky vlastny class je na pol hodinu), tak sa nemusis starat o dealokovanie (urobi to destruktor objektu). Napr. nieco podobne ako CString v MFC. Ked mas problemy s dealokaciou tak na vine neni C++ ale navrh datovych struktur a navrh programu (= rozmyslanie pred tym ako napises prvy riadok).

Ja som hlavne napisal ze to mas vsetko presne popisane v MSDN, ked robis nieco tak je nutne pouzivat MSDN. Nielen v C# ale aj v C++ a comkolvek inom. To bola moja rada a je univerzalna aj na buduce problemy. Link som dal kdesi nizsie mal som to najdene za 10sekund a je tam vsetko o strukture a new popisane.
Su aj pripady ked aj v MSDN je bordel alebo chaos, vtedy samozrejme sa treba pytat, ale keby som mal pri programovani zakazdym namiesto pouzitia MSDN sa pytat na forach tak vygenerujem 100 dotazov za den.

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.

Ved vpohode kludne to pouzivaj, ano je to trochu bezpecnejsie. Hlavne pouzivat to MSDN (to neber ako buzeraciu ale ako radu z mojej skusenosti s MSDN), MSDN je fakt obsiahle a veci su tam relativne dobre popisane (vynimocne je nieco od MS aj dobre :) Na tom linku na MSDN co som dal nizsie je napisane aj ze co robi new u struktury a aj to ze value typy su vzdy alokovane zo stacku.

ja viem, ze vzdy vies vsetko najlepsie :-D ale v tomto pripade sa mylis:

Like classes, structs are data structures that can contain data members and function members, but unlike classes, structs are value types and do not require heap allocation.

Struct constructors are invoked with the new operator, but that does not imply that memory is being allocated. Instead of dynamically allocating an object and returning a reference to it, a struct constructor simply returns the struct value itself (typically in a temporary location on the stack), and this value is then copied as necessary.

vid. C# Language Specification

Trochu som to zeditoval som si to pozrel v MSDN, evidentne bere C# vsetko ako objekty (vsetko ma konstruktor), a tym padom klasicka struktura v C# neexistuje, co by som povazoval ako odpoved na otazku dotazovatela.

P.S. to ze v tom crepe existuje objekt s nazvom "struktura" neznamena ze to je struktura. Je to objekt triedy "struktura". Typicky C# vymysel nezmysel.

tym padom klasicka struktura v C# neexistuje

to je vec pohladu, dotazovatel mal problem s konstruktorom struktury vs halda, odpoved, je ze struktura je vzdy hodnotovy typ t.j. nedochadza k alokacii na halde

C# vymysel nezmysel

nazor ti nik neberie ale nevnucuj ho ostatnym

Konštruktor v štruktúre môže byť aj v dementnom C++. V dementnom C++ je každá štruktúra trieda, takže neexistuje niečo, čo "už nie je štruktúrou, ale triedou". Ak za klasickú štruktúru považuješ štruktúru v dementnom C, tak tá samozrejme konštruktor nemá, ale v dementnom C nie sú ani triedy. :-)

Jezis maria ale aj v C++ mozes mat strukturu bez konstruktora. A alokovat ju bez new. Mozes alokovat cokolvek v stacku a bez new. V C# nemozes. P.S. A ak si v C++ naalokujes v stacku objekt tak prekladac automaticky vola konstruktor. Nepotrebujes dementne new a nehrozi exception "malo pamate" kvoli 20 bytovej strukture. Ano to je C++. Velmi dobre vymyslene.

Presne to je to ze v C++ mozes mat vsetko. Preto je C++ tak pekne a neni dementne obmedzene na nejake vymysly od MS-debilov.

on sa nepytal na strukturu bez, konstruktora hovoril o built-in strukture, ktora vyzaduje pouzitie konstruktora, nie je problem zadefinovat strukturu, ktora nevyzaduje pouzitie konstruktora(defaultny neratam), struktura v C# ci je pouzita s new alebo bez je alokovana na stacku

Furt tam mas default konstruktor a furt je to objekt. OK zrovna strukturu MS-inzinieri dali do stacku, a teraz si skus v C# naalokovat akykolvek objekt ako lokalnu premennu zo stacku, bez new (v C++ je to mozne a bezne pouzivane). Vyhoda je okrem toho ze nemusim vypisovat zbytocne slova aj to ze nemoze nastat memory exception (a stack nepretecie pokial tam neni rekurzia alebo pokial neni programnator debil, default 1MB stack na nejake 20bytove objekty bohate staci). A je to omnoho optimalnejsie (jedna asm instrukcia oproti neuveritelne pomalemu alokovaniu pri new).
P.S. c# je proste urobene na to aby hockto mohol bezpecne programovat aj bez pouzivania mozgu, za cenu neuveritelnych obmedzeni na to, co si MS vymyslel. Pre mna je takyto pristup proste uplne na hlavu. Ale ano pre podniky je to ok, zamestnaju hockoho kto vie zapnut PC a hura ide programovat a vysledok je relativne bezpecny. To je jedina vyhoda C#, nic ine.

Diskutovat o vyhodach sa zacalo vyssie, ja som nezacal (len som ten crep prislusne zhodnotil).
Alebo opacny pripad ak by si chcel v C# strukturu ktora sa nevojde do stacku (napr. 10MB velku), jak to urobis? :-) V C++ zmenis local variable na pointer a pouzijes new. V C# si v pr... :) (musis robit triedu+objekt) apod. Ok mne je to fuk, pouzivajte si co chcete.

Nie, v C++ nemôžeš mať všetko - napr. reflexiu (nie, dementné RTTI nie je reflexia) alebo generiká (nie, dementné templaty nie sú generiká). Je toho oveľa viac, ale načo to tu vypisovať, že. V C# oveľa rýchlejšie niečo napíšeš a oveľa jednoduchšie sa to udržiava, lebo je to jednoduchšie na pochopenie.
V dementnom C++ spolu s jeho dementným preprocesorom sa dajú písať také zverstvá, že to občas presahuje aj najkrajnejšie medze dementnosti. :-)

To su prave veci ktore slusny program bud nepotrebuje alebo by mat nemal :)
Ano rychlejsie nieco napises. Nieco. Nikoho dnes nezaujima co, len nech je to rychlo. Jednoduchsie na pochopenie? To zavisi vzdy od programatora. Keby si videl co su schopni ludia v praxi vyplut v akomkolvek aj zrozumitelnom jazyku (napr. aj v jave) tak si buchas hlavu o stenu :-) P.S. uplny highlight v tomto bol svojho casu VisualBasic, to som myslel ze to nemoze byt pravda, ze sa mi to len sniva ze co to ti ludia v tom generovali. Aj to je asi pricina mojej averzie voci veciam ktore umoznuju programovat kadekomu...

Hmm, slušný program nepotrebuje generické triedy? Hmm...

Nechápem, prečo sa tvoja averzia neprejavuje aj voči C++ - veď to je úplne ten istý prípad, C++ tiež umožňuje programovať kadekomu a kadečo. Ak si sa s hnojom v C++ ešte nestretol, tak gratulujem.

Stretavam sa neustale, ale aspon nejake percento takych odradi uz syntax C(++) :-)
Nejde len o hnoj v zdrojakoch ale napr. o to ze napr. do priemyselneho stroja kde povodne bol planovany usporny a lacny HW ktory vobec nehreje (nejak na tom zvladala bezat linux alebo Win a nativna aplikacia), nadrbe nejaky magor katastrofu vo visualbasicu ktora pol sekundy vykresluje jeden button, a potom zisti ze potrebuje 3x drahsi HW ktory zere a hreje 10x viac :) Clovek len kruti hlavou. Mne je to sice fuk, len nechapem tu snahu ludstva neustale vyrabat cim dalej tym vacsie sracky, ale hlavna vec nech to je rychlo.

.. co sa tyka generickych classov (moj sukromny nazor:) zvycajne sa da navrhnut objektovy model tak ze to nutne nepotrebujes, taky objektovy model podla mna aj lepsie odzrkadluje skutocnost.
Ked niekde musis zistovat ze s cim to ja vlastne robim apod na to aby si urobil genericku operaciu, tak potom ten objektovy model je podla mna naopak :-). Ale tazko o tom diskutovat vseobecne, to zavisi vzdy od konkretneho problemu ze jak to riesit (a ci to nahodou nie je lepsie v C#, kde sa daju robit "prasiarne" namiesto toho aby sa urobil spravne model :)
P.S. napr. v base classe mozes robit s void pointrami a dlzkou, a typy si osefovat v odvodenych classoch apod.

Pri štruktúrach nemusíš používať operátor new - pokiaľ uvedieš/naplníš hodnoty skôr ako ich použiješ. Pre niektorých veľmi múdrych užívateľov doporučujem prečítať MSDN poriadne (to platí pre MM). Štruktúra je hodnotový typ - tak ako INT, BOOL, nie je to vôôôôbec trieda. (Treba si pozrieť od čoho je to odvodené..)


    public struct TZiak
    {
        public int Vek;
        public string Meno;
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        TZiak Ziak;
        Ziak.Vek = 12;
        Ziak.Meno = "LUKAS";
    }

Na koniec by som chcel dodať, že väčšina programovacích jazykov (napr. C++) - tak ako napr. C# .NET je prekompilovaná úplne do iného jazyka, takže či C++ alebo C# alebo Pascal alebo neviem čo je SKORO v podstate to isté, všetko závisí od kompilera.

Ked to ma konstruktor tak je to nejaky objekt. P.S. a aj v tom tvojom zapise sa vola default konstruktor. Ze to nadrbal MS medzi objekty "value" je uplne jedno. MS totiz v C# urobil objekt aj z Integeru.
A MSDN ma citat dotazovatel, ja sa tu na nic nepytam.

A to ze je to prelozene do niecoho ineho je uplne jedno, problem je v tom ze AKO je to prelozene a ake to (ne)poskytuje moznosti, o tom sa tu diskutovalo. Ked nemas na to aby si pochopil co som pisal tak nabuduce please moj nick v svojich duchaplnych prispevkoch nepouzivaj. Nemam o com s tebou diskutovat.

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