Avatar billede baxos Nybegynder
03. september 2007 - 19:36 Der er 16 kommentarer og
1 løsning

Dele varibler

Hvordan kan jeg dele mine varible fra class til class?
Avatar billede pidgeot Nybegynder
03. september 2007 - 19:42 #1
Du bliver nødt til at uddybe dit spørgsmål.

Snakker vi om instantierede klasser? Hvilken visibility har du givet de ting du vil tilgå? Med hvilket formål vil du kune tilgå dem?
Avatar billede baxos Nybegynder
03. september 2007 - 19:53 #2
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=?
Avatar billede baxos Nybegynder
03. september 2007 - 19:55 #3
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?
Avatar billede pidgeot Nybegynder
03. september 2007 - 20:03 #4
Jo da - hvis du har en instans til klassen, eller der er tale om static variable.

Du har dog stadig ikke besvaret mine spørgsmål, så det er ikke til at være mere specifik om hvordan du bør gøre.
Avatar billede baxos Nybegynder
03. september 2007 - 20:28 #5
Forstår ikke helt hvad du mener med dine spørgsmål. hvis du vil være flink at uddybe lidt ? :)
Avatar billede pidgeot Nybegynder
03. september 2007 - 20:36 #6
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)?
Avatar billede baxos Nybegynder
03. september 2007 - 20:40 #7
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() == "armyinfo")
            {
                Console.WriteLine("You have " + army[0].ToString() + " land soldiers & " + army[1] + " horses & " + army[2] + " canons !");
                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;
            }

            if (commando.ToLower() == "resources")
            {
                Console.WriteLine("You have " + resources[0].ToString() + " gold & " + resources[1] + " wood & " + resources[2] + " stone !");
                goto start;
            }
        }

army og resource varibler vil jeg godt kunne ændre på fra en anden public void der ligger i samme class
Avatar billede baxos Nybegynder
03. september 2007 - 20:42 #8
hov så skal jeg bare sætte varibler udenfor main og så sætte dem som static ikk? :)
Avatar billede pidgeot Nybegynder
03. september 2007 - 20:59 #9
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).
Avatar billede nielle Nybegynder
03. september 2007 - 21:02 #10
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");

            bool igenIgen = true;
            while (igenIgen)
            {
                string commando = Console.ReadLine();
                commando = commando.ToLower();

                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;
                }
            }
        }
Avatar billede baxos Nybegynder
03. september 2007 - 21:07 #11
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?
Avatar billede baxos Nybegynder
03. september 2007 - 21:11 #12
Men pidgeot jeg synes jeg har fået svar nok .. :)
takker meget både nielle og pidgeot vær sød at smid et svar
Avatar billede nielle Nybegynder
03. september 2007 - 21:12 #13
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. ;^)
Avatar billede nielle Nybegynder
03. september 2007 - 21:13 #14
Jeg står over på denne her ... det var slet ikke derfor at jeg skrev. Ellers tak for tilbudet. :^)
Avatar billede baxos Nybegynder
03. september 2007 - 21:31 #15
Hehe okay også tak for svaret om Goto funktionen :)
Avatar billede pidgeot Nybegynder
03. september 2007 - 21:49 #16
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. ;)
Avatar billede baxos Nybegynder
03. september 2007 - 21:50 #17
Hehe takker ;)
Og nu er den skam uden Goto ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester