C# Variable mit Wert in einer anderen Methode aufrufen?

1 Antwort

Da es sich offensichtlich um ein objektgebundenes Feld handelt, hast du in beiden Methoden gleichermaßen Zugriff.

class YourClass
{
  int depositedAmount;

  public void DepositCoin(ConsoleKeyInfo choosedCoin)
  {
    depositedAmount = 0;
    // ...
  }

  public void SelectDrink(int drinkNumber)
  {
    Console.WriteLine(depositedAmount); // for example
  }
}

Um den von DepositCoin berechneten Wert weiterverwenden zu können, muss diese Methode natürlich vor SelectDrink aufgerufen werden. Andernfalls verweist depositedAmount auf den Standardwert ihres Typs (bei einem Integer wäre das 0).

kl4vd14 
Fragesteller
 20.10.2022, 15:57

danke dir für deine Antwort, ich habe die Methoden nacheinander aufgerufen jedoch bleibt es trotzdem bei Null :/

0
kl4vd14 
Fragesteller
 20.10.2022, 16:04
@kl4vd14

hab jetzt debugging gestartet und wie es sich herausstellt, speichert sich die variable die ganze zeit, beim aufruf wird die aber 0 gesetzt

0
regex9  20.10.2022, 16:30
@kl4vd14

Beim Aufruf von DepositCoin wird sie zuerst auf 0 gesetzt. Inwiefern sich der Wert anschließend ändert, entscheidet der weitere Verlauf im Methodenkörper.

Angenommen, die Methode wird beendet und die Variable hat den Wert 1, dann wird sie bei anschließendem Aufruf von SelectDrink noch immer den Wert 1 haben.

Wenn dieser letzte Absatz nicht erfüllt wird, muss man davon ausgehen, dass du die Methoden entweder über unterschiedliche Objekte aufrufst oder es eben doch noch einen dazwischengeschalteten Prozess gibt, der den Feldwert wieder ändert. Ebenso solltest du darauf achten, keine gleichnamigen Variablen in der Methode zu deklarieren, denn diese würden das Feld überdecken.

Beispiel:

class SomeClass
{
  int number;

  void DoSomething()
  {
    int number; // local variable hides field
    number = 1;
  }

  void DoSomethingOther()
  {
    Console.WriteLine(number);
  }
}

// Main:
var someObject = new SomeClass();
someObject.DoSomething();
someObject.DoSomethingOther(); // 0

Bei solchen Namenskonflikten kann man mit this eindeutigen Bezug auf das Feld nehmen.

this.number = 1;
1