Manuelle og semi-automatiske strategier for identitetsstyring virker - lige indtil nogen beder om dokumentation. For at undgå denne fare har DKTV taget kontrol over sin identitets- og adgangsstrategi.
Altså lad os sige jeg har Program.cs og Resources.cs så i resources har jeg nogle varibler med navnet gold, wood, stone så hvis jeg gerne vil have overført variblerne til program.cs hvad skal jeg gøre=?
Jeg har nogenlunde fundet ud af det men det virker dog ikke helt så godt? Hvis jeg gør sådan public void test(int gold,int wood) men er der ikke andre måder?
Er de variable du vil tilgå public, protected, eller private? Er variablene i fra-klassen markerede med static, og hvis ikke har du mulighed for at få fat på en instans af de klasser du skal bruge data fra? Hvad er dit formål med at dele dem (da du måske bør gøre noget andet)?
hmm jeg viser lige koden static void Main(string[] args) { int[] army = new int[3] { 10, 2, 0 }; int[] resources = new int[3] { 100, 100, 0 }; // First army varible // { troops, horses, canons } // Second varible resources // Gold, wood, stone
string commando; Console.ForegroundColor = ConsoleColor.Red; // Sætter tekst farven til rød Console.WriteLine("Following commands : Armyinfo, Raid, Shop, Resources, Exit"); // Skriver kommandoer ud Console.WriteLine("Starter tip : Good idea to make some raids to earn some money"); start: commando = Console.ReadLine();
if (commando.ToLower() == "raid") { int i = army[0]+army[1]+army[2]; raidai raid = new raidai(); Console.WriteLine("You have choosen to make a raid! :O"); raid.Dice(i); goto start; }
if (commando.ToLower() == "shop") { Console.WriteLine("You go to the shop"); goto start; }
if (commando.ToLower() == "exit") { // Ingen kode behøves her fordi programmet // vil lukke sig selv hvis der ikke sker noget }
if ((commando.ToLower() != "exit") && (commando.ToLower() != "shop") && (commando.ToLower() != "armyinfo") && (commando.ToLower() != "raid") && (commando.ToLower() != "resources")){ // Hvis brugeren skriver en funktion som vi ikke kender til printer vi dette Console.WriteLine("Unknown commando, please try again"); goto start; }
De skal ikke være static så længe du har en instans af din klasse (hvilket du har så længe du er i samme klasse). Har du ikke en instans, så ja, men husk at du dermed ikke kan have to instanser i samme program med forskellige værdier til de variable.
En bedre løsning ville være at sørge for de andre klasser har en reference til et objekt der indeholder de data, og så lave properties (http://en.wikipedia.org/wiki/Property_%28programming%29#C.23) til at tilgå dem (hvis der skal være lidt mere kontrol end bare at ændre frit - skal der ikke det, er det sandsynligvis nok at lave dem som public).
Helt OT - må jeg foreslå at du laver din Main() om til denne struktur?
static void Main(string[] args) { // First army varible // { troops, horses, canons } int[] army = new int[3] { 10, 2, 0 };
// Second varible resources // Gold, wood, stone int[] resources = new int[3] { 100, 100, 0 };
Console.ForegroundColor = ConsoleColor.Red; // Sætter tekst farven til rød Console.WriteLine("Following commands : Armyinfo, Raid, Shop, Resources, Exit"); // Skriver kommandoer ud Console.WriteLine("Starter tip : Good idea to make some raids to earn some money");
switch (commando) { case "raid": int i = army[0] + army[1] + army[2]; raidai raid = new raidai(); Console.WriteLine("You have choosen to make a raid! :O"); raid.Dice(i); break; case "armyinfo": Console.WriteLine("You have " + army[0].ToString() + " land soldiers & " + army[1] + " horses & " + army[2] + " canons !"); break; case "shop": Console.WriteLine("You go to the shop"); break; case "exit": igenIgen = false; break; case "resources": Console.WriteLine("You have " + resources[0].ToString() + " gold & " + resources[1] + " wood & " + resources[2] + " stone !"); break; default: // Hvis brugeren skriver en funktion som vi ikke kender til printer vi dette Console.WriteLine("Unknown commando, please try again"); break; } } }
nielle jo tak.. Den er vil en del sundere den kode hehe det er pga det der goto ikk?.. folk taler altid om jeg ikke skal bruge det men har aldrig forstået hvorfor?
Goto er ikke usund i sig selv - den har blot et rigtigt dårligt rygte som stammer fra at brugen af goto har ledt til meget kode som har være både svært at læse og svært at vedligeholde, såkaldt spaghetty-kode. Nu om dage frarådes det som regel at bruge den, men Microsoft har altså ment at der alligevel var god grund til at tillade den i C#...
Det var nu mere alle dine if-sætninger som gave mig m***kryb. ;^)
Der er intet galt i at bruge goto, så længe man bruger den med (kraftig) omtanke - med andre ord, hvis noget kode bliver en hel del mere overskueligt af at bruge det, så er det OK - men det er sjældent man er i den slags situationer, og din var (er) ikke en af dem. ;)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.