Вы используете имена типов в качестве переменных экземпляра. Например:
return cash += Bet.payout(pool, sharkPool);
Если Bet.payout() не является статическим методом, то вам необходимо создать экземпляр Bet первым, чтобы вызвать этот метод.
Например:
Bet b = new Bet();
return cash + b.payout(pool, sharkPool);
Это, как представляется, проблема в нескольких разных местах.
EDIT: добавлено еще несколько предложений.
Bet EmptyBet { get { return new Bet() { amount = 0, fish = 0, better = this }; }
Проблема здесь состоит в том, что вы используете ссылку на экземпляре (this
) внутри статического аксессора. Подумайте о статическом члене как о единственной копии чего-то. Таким образом, он не знает о экземплярах (т. Е. Конкретных, уникальных вхождениях типа).
Я не уверен, что представляет better
, но вы не можете назначить его this
, учитывая контекст.
EDIT # 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; }
}
}
РЕДАКТИРОВАТЬ # 4:
public void collect(int pool, int sharkPool)
{
return cash += betClass.payout(pool, sharkPool);
}
Error 4 Cannot implicitly convert type 'double' to 'int'. An explicit conversion exists (are you missing a cast?) Lab 3\Guy.cs 90 19 lab3
Двойной является более точным типом, чем Int (в общая манера говорить). Это означает, что он не может быть неявно «заполнен» в пространство памяти, выделенное для int.
Если вы используете двойную часть класса Guy, вам нужно либо изменить ее на int, либо отбросить ее там, где это необходимо, либо использовать удвоение всего процесса.Двойной разрешает десятичную точку, которая, вероятно, понадобилась бы в реальном приложении, которое управляло бы деньгами (или, еще лучше, десятичным типом).
EDIT # 5:
private int winningSharkTotal(int Winner)
{
int Result = 0;
for (int i = 0; i<3; i++)
{
Result += bets[i+(Winner*3)];
}
return Result;
}
пару вещей неправильно с этим ... первый, корпус ваших переменных действительно сбивает с толку, потому что, когда большинство C# программисты видят прописную имя переменной, это выглядит как type, а не параметр метода (обратите внимание, как редактор SO неправильно форматирует его).
Вторая вещь, я не знаю, что логика вы пытаетесь достичь с этим:
bets[i+(Winner*3)]
Независимо i + (winner * 3)
равно будет индекс массива, который используется. В лучшем случае это двусмысленно. Возможно, вы пытались утроить прибыль победителя?
Наконец, bet[index]
вернет объект ставки, а не инт. Вам нужно что-то большее, как bet[index].Amount
(или независимо от того, какое свойство вы используете).
C# чувствителен к регистру –
, что вы имеете в виду? Я не вижу, как это относится ко всем моим ошибкам. – eightonrose
Вы пытались прочитать документацию по этим ошибкам? Из, например, google? –