Laden...

probleme mit variablen (anfänger)

Erstellt von Marsat vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.074 Views
M
Marsat Themenstarter:in
3 Beiträge seit 2008
vor 16 Jahren
probleme mit variablen (anfänger)

Hallo,

ersteinmal hab über google und hier gesucht und nix gefunden. vll hab ich auch di falschen such begriffe eingegeben wenn es hier schon so etwas gibt 😉

naja mein problem ist,(was auch das einzige problem ist und nicht hinbekomm) ich hab zwei klassen test1.cs und test2.cs in test2 ist eine variable deklariert


public int _TestVar = 50;

so weit so gut wenn cih das in der console ausgebe kommt diese zahl auch. wenn ich aber in test1 eine methode einbaue wo sich der wert ändert in zb 100 und diese wiederum ausgebe kommt trotzdem 50 raus?

Anmerkung gebe ich die zahl in der gleichen methode noch aus in der console kommt die zahl richtig.

darum meine frage wie mache ich dass das es verändert bleibt?

ich hoffe man kann mir helfen! weiter tipps und tricks sind erwünscht ^^

greetz
marsat

ps.: bitte ned rummeckern wenn es im falschen forum is oder so ein änlichen thread gibt danke

3.430 Beiträge seit 2007
vor 16 Jahren

Hi,

herzlich willkommen bei MyCsharp.de

Anmerkung gebe ich die zahl in der gleichen methode noch aus in der console kommt die zahl richtig.

darum meine frage wie mache ich dass das es verändert bleibt?

Das ist so schwierig zu sagen, an was das liegen kann. Vielleicht erstellst du bei jedem methodenaufruf eine neue instanz von der zweiten klasse.

Könntest du dazu bitte deinen gesamten Code (oder wenigstens die Methode) posten, dann kann dir sicher geholfen werden.

ps.: bitte ned rummeckern wenn es im falschen forum is oder so ein änlichen thread gibt danke

Hier wird do nie gemeckert 😁

mfg
MichlG

1.361 Beiträge seit 2007
vor 16 Jahren

Hi Marsat,

ich weiß zwar nicht genau, wie deine Methode ausschaut,
aber für mich schreit das nach Call By Value anstatt By Reference.

Wahrscheinlich hast du die Methode mit nem parameter ausgestattet, sodass du _TestVar übergibst, und nicht einfach so änderst.
Daher solltest du entweder die Methode den geänderten Wert zurückgeben lassen und mit diesem arbeiten:


_TestVar = funktion(_TestVar);

oder aber das Schlüsselwort **ref **verwenden.
Hierfür ruhig in die MSDN :rtfm: schauen. Oder auch mal beim Galileo Openbook zu Referenztypen und Werttypen.

Oder aber, es liegt daran, dass du in der Methode ne neue Variable mit dem selben Namen verwendest, die quasi die äußere "überschreibt", du also im Innern der Methode mit ner ganz andern Variable arbeitest (die außerhalb dann nicht mehr zur Verfügung steht)

beste Grüße
zommi

M
Marsat Themenstarter:in
3 Beiträge seit 2008
vor 16 Jahren

Hier mal schnell geschrieben:

Programm.cs mit der main


using System;
using System.Collections.Generic;
using System.Text;

namespace test
{
    class Program
    {
        static void Main()
        {
            Test2 T = new Test2();

            Console.WriteLine(T._TestVar);
            Program.Methode();
            Console.WriteLine(T._TestVar);


            Console.ReadLine();
        }

        public static void Methode()
        {
            Test2 T = new Test2();

            T._TestVar = 100;
        }
    }
}

und Test2.cs


using System;
using System.Collections.Generic;
using System.Text;

namespace test
{
    class Test2
    {
        public int _TestVar = 50;
    }
}

kann sein das ich eine neue instanz von der variable ändert.

mit ref parameter habe ich es schon mal probiert aber ist auch nicht gegangen (vll falsch angewendet?)

ich hab es sogar mit get und set benutzt aber keine änderung

3.430 Beiträge seit 2007
vor 16 Jahren

Hi,

mein Verdacht hat sich bestätigt.


using System;
using System.Collections.Generic;
using System.Text;

namespace test
{
    class Program
    {

 Test2 T = new Test2();
        static void Main()
        {
          //  Test2 T = new Test2();
          // Du hast hier eine neue instanz der Test-Klasse erstellt und in der Methode hast du auch eine erstellt, jedoch eine andere. Deshalb ist es notwendig, dass beide methode auf die selbe instanz zugreifen (siehe Test2 habe ich nun ausserhalb der methoden deklariert, damit man zugriff darauf hat)

            Console.WriteLine(T._TestVar);
            Program.Methode();
            Console.WriteLine(T._TestVar);


            Console.ReadLine();
        }

        public static void Methode()
        {
           // Test2 T = new Test2(); Ist nicht mehr nötig, das die instanz nun oben erstellt wurde

            T._TestVar = 100;
        }
    }
}

Es ist zwar nicht gerade eine schöne Lösung, das sollte dir jedoch helfen, das Ganze besser zu verstehen.

mfg
MichlG

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Marsat,

public int _TestVar = 50;  

verwende keine öffentlichen Felder, sondern stattdessen öffentliche Properties.

Beachte auch [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

M
Marsat Themenstarter:in
3 Beiträge seit 2008
vor 16 Jahren

ok hab es jetzt wie du gesagt hasst die instanz gesetzt nur kann ich das aber bei static methoden nicht benutzen oder? dann is ja das problem wieder wenn cih etz richtig liege und bei mehreren klassen is das ja auch wieder n sch**** ^^ hab gerade nochmal das get und set ausprobiert, mit dem sollte es ja normal gehen

der code:


class Program
    {
        
        static void Main()
        {
            _Test = 50;

            Console.ReadLine();
        }

        public static int _Test
        {
            get { return _Test; }
            set { _Test = value;  }
        }
    }

nun sagt er das stackOverflowException aufgetreten ist. in einer endlosschleife sollte es ja nicht sein?? in MSDN werd ich nich über die fehlermeldung schlau 😠 sonst ist es ja richtig?

aber immerhin schon etwas dazu gelernt =)

greetz
marsat

871 Beiträge seit 2005
vor 16 Jahren

Hallo,

auch wenn Du es vielleicht nicht hören willst - aber das hier ist am besten:

😮bvc:

Es mangelt an grundlegendem. Arbeite das Buch durch, dann hast Du ein solides Basiswissen mit dem Du dann was bewerkstelligen kannst.

Grüsse,
Egon