Вы используете имена типов в качестве переменных экземпляра.Например:
return cash += Bet.payout(pool, sharkPool);
Если Bet.payout () не является статическим методом, вам необходимо сначала создать экземпляр Bet для вызова этого метода.
Например:
Bet b = new Bet();
return cash + b.payout(pool, sharkPool);
Похоже, что это проблема в нескольких разных местах.
РЕДАКТИРОВАТЬ: добавить еще несколько предложений.
Bet EmptyBet { get { return new Bet() { amount = 0, fish = 0, better = this }; }
Проблема в том, что выиспользуют ссылку на экземпляр (this
) внутри статического метода доступа.Думайте о статическом члене как об единственной копии чего-либо.Таким образом, он не знает об экземплярах (то есть о конкретных, уникальных экземплярах типа).
Я не уверен, что представляет better
, но вы не можете присвоить его this
,учитывая контекст.
РЕДАКТИРОВАТЬ # 2: Вот небольшой класс, который я смоделировал, чтобы помочь вам понять, как создать статический член, который будет возвращать ставку по умолчанию.
public class Bet
{
#region instance members
public decimal Amount
{
get;
set;
}
public string Description
{
get;
set;
}
public void Payout()
{
// do something
}
#endregion
#region static members
public static Bet Empty
{
get
{
Bet b = new Bet();
b.Amount = 0M;
b.Description = "Default Empty Bet";
return b;
}
}
#endregion
}
РЕДАКТИРОВАТЬ # 3: Объявление свойств экземпляра с помощью методов доступа
//
// This will not compile because members have been defined more than once
public class Bet
{
// You can declare smart properties with default initializers
// by not declaring a body for the get/set accessors
public decimal Amount
{
get;
set;
}
public string Description
{
get;
set;
}
// OR, you can declare private variables and expose them
// publicly via get/set accessors. This gives flexibility
// in internal manipulation (sometimes) but creates more code
private decimal _amount = 0M;
public decimal Amount
{
get { return _amount; }
set { _amount = value; }
}
private string _description = string.Empty;
public string Description
{
get { return _description; }
set { _description = value; }
}
}
EDIT # 4:
public void collect(int pool, int sharkPool)
{
return cash += betClass.payout(pool, sharkPool);
}
Ошибка 4 Не удается неявно преобразовать тип 'double' в 'int'.Существует явное преобразование (вам не хватает приведения?) Лабораторная работа 3 \ Guy.cs 90 19 lab3
Тип double - более точный тип, чем тип int (в общем случае).Это означает, что он не может неявно «вставляться» в пространство памяти, выделенное для int.
Если вы используете double внутри класса Guy, то вам нужно либо изменить его на int, либобросьте его, где это уместно, или используйте удвоения на протяжении всего процесса.Двойное число допускает десятичную точку, которая, вероятно, понадобится в реальном приложении, управляющем деньгами (или, что еще лучше, десятичном типе).
РЕДАКТИРОВАТЬ # 5:
private int winningSharkTotal(int Winner)
{
int Result = 0;
for (int i = 0; i<3; i++)
{
Result += bets[i+(Winner*3)];
}
return Result;
}
Парачто-то не так с этим ... во-первых, регистр ваших переменных действительно сбивает с толку, потому что когда большинство программистов на c # видят имя переменной в верхнем регистре, оно выглядит как тип, а не параметр метода (обратите внимание, как редактор SO форматирует его неправильно).
Во-вторых, я не знаю, какой логики вы пытаетесь достичь с помощью этого:
bets[i+(Winner*3)]
Все, что равно i + (winner * 3)
, будет используемым индексом массива.Это в лучшем случае неоднозначно.Возможно, вы пытались утроить заработок победителя?
Наконец, bet[index]
вернет объект Bet, а не int.Вам нужно что-то более похожее на bet[index].Amount
(или на то свойство, которое вы используете).