C# Variable mit Wert in einer anderen Methode aufrufen?
moin,
ich frage mich wie ich eine festgelegte Variable in einer anderen Methode (jedoch in der selben Klasse => nicht Main) aufrufen kann.
Beispiel:
public void DepositCoin(ConsoleKeyInfo choosedCoin)
{
depositedAmount = 0;
while (choosedCoin.Key != ConsoleKey.End)
{
switch (choosedCoin.Key)
{
case ConsoleKey.F3:
depositedAmount = depositedAmount + 200;
Console.WriteLine("You threw 2€ in. Your current Credit: {0}
€ |", depositedAmount/100);
break;
usw...
}
}
}
//Andere Methode zum Aufrufen:
public void SelectDrink(int drinkNumber)
{
bool selectionOK = false;
while (!selectionOK)
{
switch (drinkNumber)
{
case 1:
Console.WriteLine("You choosed CocaCola.| Your Credit: {0}€ | ", depositedAmount);
selectionOK = true;
break;
}
}
}
Es geht hierbei um den depositedAmount, der zum Schluss der ersten Methode gespeichert ist/werden soll
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).
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;
danke dir für deine Antwort, ich habe die Methoden nacheinander aufgerufen jedoch bleibt es trotzdem bei Null :/