
C#- programování
Zdravím,
dělám v C# takovej prográmek .. prostě hraju si ... 5fQYRvK9 ... a potřebuju poradit.. jak udělám, když v case 'c' 'C' ... zadám n/N ... jak udělám ,aby se to vrátilo do hlavního menu zpátky ? .. BEZ GOTO
musis to cele zabalit do cyklu do..while od vykreslenia menu az po koniec. V podmienke bude, ze opakuj cely cyklus pokial bolo stlacene 'c' alebo 'C' alebo proste pismeno, ktore ma predstavovat navrat do menu.
Mohl by jsi názorně ukázat ? .. nevím odkud přesně kam totiž, jinak ten cyklus mě taky napadl .. :)
gNTI
no snad som to syntakticky nezmrvil. Dlho som nic v Ccku nepisal. Ale pozri si hlavne zaciatok main funkcie, kde som vlozil zaciatok cyklu. Potom si pozri case pre N, kde sa nastavi premenna navrat na 1. A potom si pozri koniec cyklu dole a jeho podmienku. Snad pomoze aspon ako nacrt.
Jo díky .. funguje to
akorát, teď jsem dostal nápad, každou tu funkci ( sčítání , odečítání ) udělat pro to metody -> void scitani() apod.. a pak si to postupně v casech vyvolat ...akorát má to problém ..
Nx20G0qHa
An object reference is required for the non-static field, method, or property 'ConsoleApplication2.Program.scitani()'
viz napr. static-method, klucove slovo static.
vYb7KBqr
Tohle by mělo fungovat :)
A jinak děkuju předem za info
... jedná se o chybu
An object reference is required for the non-static field, method, or property 'ConsoleApplication2.Program.scitani()'
uz som to pisal, metodu scitani musis deklarovat ako static.
Staticka metoda samozrejme nemoze pristupovat na nestaticke membery objektu ale to u teba zatial nehrozi.
A zvcajne je treba deklarovat metodu nad metodou v ktorej sa vola, a nie na konic. Aby prekladac ktory parsuje zdrojak odvrchu po spodok v mieste kde sa metoda vola uz vedel ze jak ta metoda vypada. Alebo sa do .h suboru da prototyp metody (to asi mas inac by to hadzalo iny error)
To už jsem zkoušel, ale když to dám nad to a do staticu, tak už se nedostanu do těch deklarací proměnných.
error: An object reference is required for the non-static field, method, or property 'ConsoleApplication2.Program.vysledek_d' + vsechny ty proměné ve static void scitani()
2ANFAB6R
aha hrozi, sorry nevsimol som si ze pouzivas globalne nezmysly (ucitelka ti da na zadok :D).
Viz Wikan.
Inac este k tym objektom kedze vidim ze C# je dementne oproti C++. Ty mas triedu program, a pri spusteni programu uz je vytvoreny jeden objekt triedy program. Ten objekt sam seba referencuje pomocou slova this, neviem zhlavy presne jak to pouzivat v C# (zhlavy viem len C++), ale malo by ist zavolat aj NEstaticku metodu v ramci tej triedy "Program" pomocou this.scitani()
Ak nie tak ti to C# experti napisu ja zhlavy neviem jak je to v C# :)
V čem je C# dementní?
Ze to samo vytvori objekt triedy "program" a potom hlasi error ze nema objekt. Jaj pozeram ze preto lebo aj Main je static. To kto toto vymyslel? zadefinovat trioedu Program a Main dat defaultne ako static? Asi bill gates
P.S. ok tak nie dementni, ale pre zaciatocnika je to riadny gulas. Mali tam dat defaultne len Main bez triedy.
Vymysleli to v Sun Microsystems, když vyvíjeli Javu. Do C# to pouze převzali. Ona ve třídě Program by neměla být žádný aplikační logika, ta by měla být v ostatních třídách.
No ved to pisem ze trieda Program je nezmysel, keby som v Main urobil new Program tak sa to zacykli donekonecna kym nedojde volna RAM? :) Ja neviem kto to vymyslel ale je do imho blbost. Jedine ak by to pri new Program vytvorilo novy thread, vtedy by to malo logiku.
Ano, zacyklí. Děláš, jako by to v jiných jazycích nebylo možné.
Ale netuším, proč by to někdo dělal.
len sa to snazim pochopit, ja si myslim ze ak tam ten class je tak to musi mat nejaky vyznam, len neviem prist na to ze jaky :)
Mozno ze sa to pri new Program nezacykli, ak sa automaticky nespusti Main() hned pocas new (Main je konstruktor ci co?). Ale zmysel to asi ziaden nema ten class. Ok nic to je fuk, to len tak nahlas uvazujem :)
V C# je prostě úplně všechno objekt nějaké třídy. Takže i metoda Main musí být uvnitř nějaké třídy. A protože v okamžiku spuštění programu neexistuje žádná instance, tak je definovaná jako statická.
Čo by sa malo zacykliť? Keď v Main vytvoríš novú inštanciu triedy Program, tak vytvoríš novú inštanciu triedy Program. To, že metóda Main je v triede Program, je kvôli tomu, že je to objektovo orientovaný jazyk narozdiel od procedurálno-makro-funkcionálneho-objektového-šabl ónového-negenerického gulášu bez sebareflexie.
No uvazoval som ze ak ten Main je konstruktor tak sa to zacykli, konstruktor to ale asi neni. To prve Main sa teda spusti nejakym zazrakom :) Ano spusti ho framework ale preco potom nespusti aj to druhe Main? :) Moc konzistentne sa ta trieda nesprava :) OK nechajme to (len podpichujem :)
BTW. k tomu this - staticka metoda asi nema this ani v C#, takze to s this nepojde (sorry za balamutenie dotazovatela)
BTW2. samotne CPU je procedurálno-makro-funkcionálne negenericky guláš bez sebareflexie ;))
Správa sa to úplne konzistentne. Vstupnú triedu si môžeš nastaviť akú chceš, ale musí mať statickú metódu s názvom Main. Predvolene je vstupnou triedou trieda s názvom Program. Je to podobné ako v C++ - tam sa tiež hlavná metóda nemusí volať main. Neviem o akom druhom Main píšeš.
Áno, statická metóda v C# nemôže používať this a ani sa to neskompiluje.
Ten guláš je v pohode, ale od istej úrovne je skrátka lepšie použiť nejaký framework namiesto assembleru.
Stale je tam logicky nezmysel na ktory narazam od zaciatku - preco musi byt main static, ak framework vytovril objekt? Alebo framework nevytvoril objekt tej triedy? Tak potom kde sa nachadzaju tie globalne premenne? Aha tie su tiez static. Takze v triede Program nemozem mat normalnych datovych memberov ne-static? Aha mozem ale oni sa nealokuju? (LOL)
Druhe Main som myslel to Main v tom druhom objekte ktory vznikne po new Program.
Ok ja vidim ze je to pekne zapuzdrene, ale potom by Main nemalo byt static a framework by mal vytvorit objekt tej triedy. To by mi davalo logiku.
Framework nevytvoril inštanciu triedy Program. Iba spustil statickú metódu Main triedy Program.
V triede Program môžeš mať aj normálne nestatické členy. Keď zavoláš statickú metódu, tak sa tie nestatické členy samozrejme nealokujú. Alokujú sa až po vytvorení inštancie triedy Program. Statické členy sa alokujú pred prvým použitím triedy.
Druhý Main tam nie je, pretože tá metóda je statická. Keď inštancuješ Program, tak tá metóda Main bude stále len jedna a tá istá (a bude patriť triede Program a nie inštancii triedy Program).
Keby musel framework vytvárať pri spúšťaní inštanciu triedy Program, tak by museli byť na takú triedu kladené ďalšie podmienky. Musela by mať napr. konštruktor bez parametrov a pod. Ako statická metóda je to oveľa jednoduchšie.
A z toho vyplyva ze ta trieda je tam len pre srandu kralikov, nie? ;) (uz sa zaciname tocit dokolecka ;)))
Tá trieda je tam len preto, aby tá metóda mohla patriť nejakej triede. Skrátka ten objektovo orientovaný prístup, o ktorom som písal. To by bol aký bordel, keby mohli byť funkcie kade-tade.
nie kade tade, len Main a globaly. Objektovo orientovany pristup to neni ked sa nevytvoril ziaden objekt, to znamena ze to framework len staticky placol stejne jak v procedurálno-makro-funkcionálneho-objektového-šabl ónového-negenerického gulášu bez sebareflexie, proste len na to som narazal ;)) Je to tam len na oko a uplne to zmiatlo zaciatocnika (ze ma class bez objektu).
P.S. ale aspon sa chalan naucil ze co to je objekt a co static :)
Celá .NET platforma je dementná, nutnosť inštalovať .NET framework pre .NET aplikácie....
Ach jaj...
Pro Javu se zase musí instalovat JRE.
.NET platforma je na rozdiel od iných platforiem celkom dobre vymyslená. Ak pri nejakej inej platforme neinštaluješ framework, tak si tie knižnice musíš priniesť s programom sám. Zbytočne tak duplikuješ štandardnú funkcionalitu, častokrát s chybami. Ach jaj.
No aby som len nepísal off topic príspevky tak prikladám aj nejaký program, ktorý by mal riešiť to, čo chceš.