2012-03-16 2 views
2

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

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. Когда я назначаю double moneyamount сразу после класса, он дает ошибку. Я не могу вернуть moneyamount, поскольку он статичен. и я должен использовать static, поскольку мне нужно его напомнить. Итак, что я могу сделать в этой ситуации?

ответ

2

Возможно, ваш moneyamount также статичен.

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); 
} 
0

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

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

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

Вариант 1: Pass moneyAmount в качестве параметра InsertCoin(), т.е.

static void InsertCoin(double moneyAmount)... 

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

InsertCoin(moneyAmount); 

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

static double moneyAmount = 0; 

static void SelectProduct()... 

static void InsertCoin()... 
+0

+1, это, возможно, лучшее решение, поскольку оно начинает избавляться от всех этих бессмысленных 'static'. –

+0

Вы можете посмотреть мой образец для уточнения. –

0

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

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

static string fooString; 
static void FooMethod() 
{ 
    fooString = "foo" 
} 
0

Вы можете создать статическое свойство 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; 
} 
1

У вас есть 2 варианта здесь. Вы можете определить moneyamount как глобальную переменную за пределами ваших 2 методов и предоставить ее для обоих методов или объявить ее так же, как и вы, и просто передать ее методу 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); 
} 

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

Смежные вопросы