2016-02-22 4 views
1

У меня есть небольшая проблема. После нажатия кнопки я хочу купить вещь.Мой пользовательский метод не работает должным образом

private void btnBuyLemonade_Click(object sender, EventArgs e) 
     { 
      BuyBuildings(lemonadeFactory, money, lemonadeFactoryPrice); 
     } 

то у меня есть что-то вроде этого метода

private void BuyBuildings(int buildingName, double _money, double buildingNamePrice) 
     { 
      buildingName++; 
      _money -= lemonadeFactoryPrice; 
      buildingNamePrice *= 1.8; 
     } 

но не работает, как вы знаете. Что мне делать/читать, чтобы правильно писать. Ofc Я хочу увеличить количество лимонадных зданий 1, несколько его цена на 1,8 и минус lemonadeFactoryPrice от моих денег.

ответ

1

Ваша проблема в том, что в C# примитивные типы (например, int, double и т. Д.) Передаются по значению. Поэтому, когда вы используете их внутри своего метода, это фактически меняет копию этих переменных. Если эти переменные класса уровня, вы можете изменить их, не передавая их в качестве параметров, как:

private void BuyBuildings() 
     { 
      buildingName++; 
      _money -= lemonadeFactoryPrice; 
      buildingNamePrice *= 1.8; 
     } 
+0

В качестве альтернативы, вы можете передать переменные по ссылке: 'частных недействительных BuyBuildings (исх Int buildingName, реф двойной _money, реф double buildingNamePrice) ' –

+1

По умолчанию передается значение по умолчанию. Просто для типов значений это означает, что значение копируется с ссылочными типами, где копируется эта ссылка, а не фактический объект, на который указывает эта ссылка. – juharr

+0

@juharr да, конечно. Я не видел смысла вдаваться в эти детали в сферу вопроса. Вероятно, для этого пользователя достаточно понять «примитивы по значению, сложные по ссылке»; они, вероятно, будут искать эти условия в любом случае. – DrewJordan

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