

C# Proměnná / pole platné v celém programu
Zdravím, potřeboval bych definovat proměnnou, následně pak pole, které budou dostupné v celém programu (ne pouze v medotě ve které byly definovány).
V C# začínám, tak prosím o radu.
Děkuji
Ještě bych potřeboval:
V jedné metodě si vytvořtím pole (pole polí). Potřebuji ho ale použít v dalších metodách. Jak na toto?
Treba si muzes to pole predavat jako parametr tech metod.
OK, ale jak to tam mam pls zapsat, když je to pole polí?
Takto to mám deklarované:
Potřebuji ale, jak mám zapsat toto pole polí jako parametr další metody.
No a v čem je problém?
Mám to přesně takhle, ale když zavolám tu metodu, napíše to:
nebo
Ukaž, co přesně máš.
Nelze zavolat tuto metodu.
Omlouvám se za otázky, ale s C# zatím začínám.
No a jak ji voláš?
Asi je to špatně ale fakt sorry.
Vždyť tam žádné pole nepředáváš.
Právě nevím, co mám do těch závorek napsat, aby to fungovalo.
Máš tam napsat to své pole.
Když to napíšu takhle, tak to funguje, ale pouze v rámci metody, ve které bylo to pole deklarováno.
A v každé další, do které to takhle předáš.
No když to napíšu do jiné, tak to podtrhne a ta hláška zní:
Mícháš tam statické a nestatické metody.
Takhle vypdají ty metody:
Problém je u zavolání metody VypsatDataZPole v metodě NovyVypis.
A kde mas to pole??? Ziadne tam nevidim.
Vies co, zacni radsej uplne inac. Normalne mas mat data uzavrete v nejakom objekte, preto sa to vola OOP. Ked to su nejake data o figurkach na sachovnici, tak si urobim objekt (treidu) sachova_hra, v nej bude to pole poli, a ta trieda mi bude poskytovat metody ktore s tym pracuju. Volas to potom tak ze najprv si vytvoris objekt triedy sachovahra, nazvem ho hra1, a potom zavolam metody tej triedy, napr. hra1.InicializujPole() alebo hra1.PosunFigurku(starapozicia, novapozicia), alebo hra1.DajPolozkuPola(pozicia), atd.
Vyhoda takehoto pristupu je 1) neni to totalne dementne domotane nefunkcne jak to mas teraz, 2) mozes si tych hier vytvorit aj 50, a stejne funkcie budu obsluhovat 50 hier, bez toho aby sa akokolvek ovplyvnovali.
Prestan sa snazit pouzivat globalne premenne a staticke metody. Ked uz tak v hlavnom objekte programu si mozes drzat nejake dalsie objekty, ale ani to neni dobry pristup.
Na začátku programu do class jsem si definoval:
Pak v metodě do pole ukládám data. Je to tak možné?
logicky. Ak nie si v tej treide v ktorej si to vytvaral.
Ak to je vsetko v tej stejnej triede, tak nepotrbujes ziadne parametre, ani static metody.
Mám to všechno ve stejne class. Mam to presne jako jsi mi to napsal, ale nemuzu tu metodu zavolat opet v jine, i kdyz jsem to tam napsal jako parmetr.
napise to:
Tak si to napsal blbo, ja ti na to nevidim.
Ked to je vsetko v stejnom class, tak nerob ziadne staticke metody, ale pouzivaj proste to pole v celom class uplne normalne.
Tak tady je cast programu (resp. cely) kde mam problem
Napriklad v Main nemuzu zavolat metodu VypsatDataZPole.
Takto to bude prehlednejsi, dekuji za rady.
Mícháš tam statický a nestatický přístup.
OK, můžeš být konkrétnější pls?
Jezisimaria. Jasne ze z main to nemozes zavolat, ked si to pole nevytvoril v main ale v nejakej statickej metode. Mas tam uplny maglajz.
Vseobecne, zo vsade vyhod slovo static, a aj tie parametre funkcii (nepotrebujes ich potom), a potom to pojde, (netestoval som to ale), bude to normalny member triedy, to pole, a nestaticke metody danej triedy ho mozu normalne pouzivat.
A vyhod aj to new string[3][] u deklaracie toho pole, robis to predsa znova v metode.
P.S. alebo si urob novu triedu
class NeviemOOP
{
tu si daj to pole aj vsetky "globalne" premenne aj vsetky metody, bez slova static!
}
a potom v main urobis
NeviemOOP jedinyobjektvprograme = new NeviemOOP;
jedinyobjektvprograme.NaplnPole();
jedinyobjektvprograme.VypisPole();
jedinyobjektvprograme.DoplnPole();
apod.
Alebo:
static void ZapsatHodnotu(string[][] pole)
...
//zmazat string[][] pole = new string[3][];
...
}
a potom v main:
ZapsatHodnotu(pole);
VypsatDataZPole(pole);
nejde?
Tak takto presne jsem to udelal, ale stejne pri zavolani v Mainu je to pole v zavorce podtrzene a pise to opet:
An object reference is required for the nonstatic field method or property
Problem je urcite v tech metodach, novou tridu jsem zatim vytvorit nezkousel.
Tak ji vytvoř a vykašli se v ní na statické metody.
Když jsem teda ostranil ze všech metod to static, tak to sice pomohlo, ale v Mainu jsem nemohl zavolat jakoukoli metodu, která není static. Dá se toto nějak vyřešit?
Děkuji.
Přesunout všechny metody kromě Main do jiné třídy. V Main vytvořit instanci té třídy.
Uz som ti to pisal
http://pc.poradna.net/q/view/1629258-c-promenna-po le-platne-v-celem-programu?page=r1629809#r1629809
v P.S. sekcii