использование глобальной переменной на C # - PullRequest
2 голосов
/ 16 марта 2012

Так что я не знаю терминологию C #.То, что я пытаюсь сделать, у меня есть 2 статических пустоты

    static void SelectProduct() {
        double moneyamount = 0;

        int selection = int.Parse(Console.ReadLine());
        if (selection == 1) {
            moneyamount = 1.50;       
        }

        else {
            Console.WriteLine("Wrong Selection");
        }

        Console.WriteLine("Your drink costs $" + moneyamount);
        InsertCoin();
    }
    static void InsertCoin() {

        Console.WriteLine("Balance of cost $" + moneyamount);
    }

Моя проблема в том, что я хочу использовать moneyamount в InsertCoin void.Когда я назначаю двойную денежную сумму сразу после класса, это дает ошибку.Я не могу вернуть деньги, потому что они статичны.и я должен использовать статический, как мне нужно вспомнить его.Так что я могу сделать в этой ситуации?

Ответы [ 6 ]

2 голосов
/ 16 марта 2012

У вас есть два варианта

Опция 1: Передать moneyAmount в качестве параметра функции InsertCoin (), т.е.

static void InsertCoin(double moneyAmount)...

затем вызовите его из SelectProduct как

InsertCoin(moneyAmount);

Вариант 2: Простое объявление вашей глобальной переменной как статической, т.е.

static double moneyAmount = 0;

static void SelectProduct()...

static void InsertCoin()...
2 голосов
/ 16 марта 2012

Возможно, сделайте ваши деньги как статичные.

static double moneyamount = 0;
static void SelectProduct() {
    moneyamount = 0;

    int selection = int.Parse(Console.ReadLine());
    if (selection == 1) {
        moneyamount = 1.50;       
    }

    else {
        Console.WriteLine("Wrong Selection");
    }

    Console.WriteLine("Your drink costs $" + moneyamount);
    InsertCoin();
}
static void InsertCoin() {

    Console.WriteLine("Balance of cost $" + moneyamount);
}
1 голос
/ 16 марта 2012

У вас есть 2 варианта здесь. Вы можете либо определить moneyamount как глобальную переменную вне ваших двух методов и сделать его доступным для обоих методов, либо объявить его, как вы, и просто передать его методу InsertCoin.

Сценарий 1:

static double moneyamount = 0;

static void SelectProduct()
{
     int selection = int.Parse(Console.ReadLine());

     if (selection == 1)
     {
          moneyamount = 1.50;
     }
     else
     {
          Console.WriteLine("Wrong Selection");
     }

     Console.WriteLine("Your drink costs $" + moneyamount); 
}

static void InsertCoin()
{
     Console.WriteLine("Balance of cost $" + moneyamount);
}

Сценарий 2:

static void SelectProduct()
{
     double moneyamount = 0;
     int selection = int.Parse(Console.ReadLine());

     if (selection == 1)
     {
          moneyamount = 1.50;
     }
     else
     {
          Console.WriteLine("Wrong Selection");
     }

     Console.WriteLine("Your drink costs $" + moneyamount);
     InsertCoin(moneyamount);
}

static void InsertCoin(double moneyamount)
{
     Console.WriteLine("Balance of cost $" + moneyamount);
}

Надеюсь, это поможет. Кричите, если вам нужна дополнительная помощь.

0 голосов
/ 16 марта 2012

Вы можете создать статическое свойство MoneyAmount

static double MoneyAmount
{get; set;}

static void SelectProduct() 
{
    MoneyAmount= 0;

    int selection = int.Parse(Console.ReadLine());
    if (selection == 1) {
        MoneyAmount = 1.50;       
    }

    else {
        Console.WriteLine("Wrong Selection");
    }

    Console.WriteLine("Your drink costs $" + MoneyAmount);
    InsertCoin();
}

static void InsertCoin() 
{
    Console.WriteLine("Balance of cost $" + MoneyAmount);
}

или сделать параметр равным InsertCoin()

static void SelectProduct() 
{
    double moneyamount = 0;

    int selection = int.Parse(Console.ReadLine());
    if (selection == 1) {
        moneyamount = 1.50;       
    }

    else {
        Console.WriteLine("Wrong Selection");
    }

    Console.WriteLine("Your drink costs $" + moneyamount);
    InsertCoin();
}

static void InsertCoin(double moneyamount) 
{
    Console.WriteLine("Balance of cost $" + moneyamount);
}

В другой заметке;

Я не могу вернуть moneyamount, поскольку он статичен

Почему вы не можете это сделать?

static double SelectProduct()
{
...
return moneyamount;
}
0 голосов
/ 16 марта 2012

Объявите ваш moneyamount в классе, а не в методе класса, и сделайте его также static.Таким образом, статические методы в одном и том же классе могут обращаться к вашей статической переменной moneyamount.

Объявление метода как static означает, что метод является частью класса и может быть доступен напрямую из другого класса.Без static они становятся частью экземпляра объекта и могут быть доступны через объект.Следовательно, статический метод обращается к статической переменной:

static string fooString;
static void FooMethod()
{
    fooString = "foo"
}
0 голосов
/ 16 марта 2012

вы можете передавать параметры в методы.Пожалуйста, Google для "синтаксиса функций C #"

 static void InsertCoin(double moneyAmount) 
 {          
   Console.WriteLine("Balance of cost $" + moneyamount);     
 } 
...