OK. Błędów było jednak kilka przeanalizuj kod.
Klasa Bet:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace wyscig
{
public class Bet
{
public int kwota = 0;
public int numerPsa;
public string DajStatus(facet obstawiajacy)
{
if (kwota != 0)
{
return obstawiajacy.imie + " postawił " + kwota + "zł na psa numer " + numerPsa;
}
else
return obstawiajacy.imie + " nie postawił zakładu";
}
public int wyplac(int zwycieskiPies)
{
if (zwycieskiPies == numerPsa)
return kwota;
else
return -kwota;
}
}
}
Klasa facet:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace wyscig
{
public class facet
{
public string imie;
public Bet zaklad=new Bet(); //to nie działa
public int kasa;
// zaklad=new Bet(); //to nie działa
public RadioButton mojGuzik = new RadioButton();
public Label mojaEtykieta = new Label();
public void UpdateLabels()
{
mojGuzik.Text = imie + " ma " + kasa + "zł";
mojaEtykieta.Text = zaklad.DajStatus(this);
}
public void WyczyscZaklad()
{
zaklad.kwota = 0;
}
public bool PostawZaklad(int kwota, int wybranyPies)
{
if (kwota <= kasa)
{
zaklad.kwota = kwota;
zaklad.numerPsa = wybranyPies;
return true;
}
else
{
MessageBox.Show(imie + " nie ma wystarczającej ilości kasy", "Problem");
return false;
}
}
public void odbierz(int zwycieskiPies)
{
kasa = zaklad.wyplac(zwycieskiPies);
UpdateLabels();
WyczyscZaklad();
}
}
}
Spójrz jeszcze na to że w klasie Bet tworzysz obiekt klasy facet a w klasie facet tworzysz z kolei obiekt klasy Bet. Przez to zapętlasz tworzenie obiektów aż do przepełnienia pamięci. Zamiast tego do metody DajStatus() możesz przesłać obiekt klasy facet żeby wyświetlić informację o statusie ale i tak powinieneś przyjmować tam po prostu stringa lub ewentualnie utworzyć sobie osobną klasę np. Person która zawierałaby informacje o osobach obstawiających i do klasy DajStatus przesyłać parametr takiej właśnie klasy.