除了正常的类初始化之外,我看不到任何其他内容。
这是班级Bet.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lab_ADayAtTheRaces
{
public class Bet : Form1
{
public int Bets_Joe;
public int Bets_Bob;
public int Bets_Al;
public int Dog_Joe;
public int Dog_Bob;
public int Dog_Al;
public int Amount;
public int Dog;
public Guy Bettor;
public string GetDescription()
{
Amount = (int)numericUpDownBucksToBet.Value;
Dog = (int)numericUpDownDogToBetOn.Value;
//Bettor =
return Bettor + " placed a bet in the amount of " + Amount + " bucks on dog number " + Dog;
}
public int PayOut(int Winner)
{
return Winner;
}
public void MakeBets()
{
if (joeRadioButton.Checked == true)
{
Bets_Joe = (int)numericUpDownBucksToBet.Value;
Dog_Joe = (int)numericUpDownDogToBetOn.Value;
}
else if (bobRadioButton.Checked == true)
{
Bets_Bob = (int)numericUpDownBucksToBet.Value;
Dog_Bob = (int)numericUpDownDogToBetOn.Value;
}
else if (alRadioButton.Checked == true)
{
Bets_Al = (int)numericUpDownBucksToBet.Value;
Dog_Al = (int)numericUpDownDogToBetOn.Value;
}
}
}
}
以下是抛出异常的代码:
namespace Lab_ADayAtTheRaces
{
public partial class Form1 : Form
{
Bet bets = new Bet(); //**THIS LINE THROWS THE STACKOVERFLOW EXCEPTION**
Greyhound[] dogs = new Greyhound[3];
它要我多说些什么,但我没有更多要添加,所以我只是在这里和这里添加一些行。 它要我多说些什么,但我没有更多要添加,所以我只是在这里和这里添加一些行。 它要我多说些什么,但我没有更多要添加,所以我只是在这里和这里添加一些行。 它要我多说些什么,但我没有更多要添加,所以我只是在这里和这里添加一些行。 任何帮助都非常适合...提前感谢 克里斯蒂安
答案 0 :(得分:11)
您的Bet
继承自Form1
,因此Bet()
会致电Form1()
,而Form1()
会再次致电Bet()
- >一次又一次 - > StackOverflow
提示:我们不应该在其构造函数或类定义中调用类的构造函数,如下所示:
public class Form1 : Form {
public Form1(){
}
public Form1(string s){
}
public Form1 f = new Form1();//this will throw StackOverflowException
public Form1 f = new Form1("");//this will also throw StackOverflowException
//Form2 inherits from Form1
public Form2 f = new Form2(); //this will throw StackOverflowException
}
//or
public class Form1 : Form {
public Form1(){
Form1 f = new Form1();//This will throw stackoverflowexception
Form1 f = new Form1("");//This won't throw any exception
}
public Form1(string s){
}
}
初始化类时,在调用构造函数之前首先初始化所有成员,因此在初始化Bet bets = new Bet();
之前执行行Form1
。所以你必须避免它。要初始化new Bet()
,您应该在某种情况下调用它,以便通过调用构造函数(例如Load
)永远不会触发事件。
Bet bets;//Just declare it without initializing it
private void Form1_Load(object sender, EventArgs e){
bets = new Bet();
}